Unlifted data types

Simon Peyton Jones simonpj at microsoft.com
Mon Sep 7 21:37:37 UTC 2015

| Splitting # into two kinds is useful even if functions can't be levity
| polymorphic. # contains a bunch of types that aren't represented
| uniformly. Int# might be 32 bits while Double# is 64, etc. But
| Unlifted would contain only types that are uniformly represented as
| pointers, so you could write functions that are polymorphic over types
| of kind Unlifted.

Yes, I agree that's true, provided they are *not* also polymorphic over things of kind *.

But it's an orthogonal proposal.  What you say is already true of Array# and IORef#.  Perhaps there are functions that are usefully polymorphic over boxed-but-unlifted things.  But our users have not been crying out for this polymorphism despite the existence of a menagerie of existing such types, including Array# and IORef#

Let's tackle things one at a time, with separate proposals and separate motivation.


| C++ style polymorphism-as-code-generation).
| ----
| Also, with regard to the previous mail, it's not true that `suspend`
| has to be a special form. All expressions with types of kind * are
| 'special forms' in the necessary sense.
| -- Dan

More information about the ghc-devs mailing list