You give the following type for a field selector:
> :t .foo
(a.foo::b) => (a) -> b
These give constraints with arbitrary types embedded in them. Most examples in the literature using qualified types, suggest something like the following type:
(r lacks foo) => { foo :: b | r } -> b
Where r is of kind row. The lacks constraint here is a very simple constraint and it is clear that this function takes a record, the disadvantage is that predicate lists can get very large. The old Haskell TREX extension built into Hugs worked this way.
It would be great to learn some background behind your choice. Thanks.
I added a few details in this post below:
https://news.ycombinator.com/item?id=14787429
I hope that answers your questions although I know that there's a lot more that could be said about this topic.
How did you manage to get this open sourced?
The FPGAs were used mainly for feedhandlers and there was a different DSL for that (compiling to verilog).
It was indeed rather something to see :)
I've moved into non-finance stuff for quite a while now though, so not sure what's become of it. Given business challenges in that particular sub-field, who knows..
Yes I have used kdb/q before. It's pretty popular in the financial domain. I really like what we can do with type systems. :D
Getting this project open sourced was really accomplished by other folks who I'm not sure if I can name here (I will check with them) but I was very happy to help make it happen. There are several folks internally who have been working really hard to make it possible for the firm to open source the work that we do and hobbes is just one part of that effort. There are several folks in management positions in the firm who have made open source efforts like this a priority and have even gone out on a limb to make sure that this happens. Morgan Stanley is a really remarkable company in the technology/finance domain, in my experience.
semantics look nice and coherent but unfortunately without some kind (automatic or manual) of memory management it's not usable as a general purpose tool.
Allocation does happen out of a default region and applications that embed hobbes generally define "transaction boundaries" for their use of compiled expressions which may allocate. It's also possible to manually nest these regions and control them yourself, which we do in some applications (e.g. where we're loading whole days of trading data and indexing them in batches).
Ultimately we might formalize that process with a region inference algorithm.