Unlifted data types

Edward Z. Yang ezyang at mit.edu
Fri Sep 4 18:12:39 UTC 2015

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.


More information about the ghc-devs mailing list