
4 Sep
2015
4 Sep
'15
6:12 p.m.
Excerpts from Dan Doel's message of 2015-09-04 09:57:42 -0700:
All your examples are non-recursive types. So, if I have:
data Nat = Zero | Suc Nat
what is !Nat? Does it just have the outer-most part unlifted?
Just the outermost part.
Is the intention to make the !a in data type declarations first-class, so that when we say:
data Nat = Zero | Suc !Nat
the !Nat part is now an entity in itself, and it is, for this declaration, the set of naturals, whereas Nat is the flat domain?
No, in fact, there is a semantic difference between this and strict fields (which Paul pointed out to me.) There's now an updated proposal on the Trac which partially solves this problem. Edward