| 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.

Simon

| 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
_______________________________________________
ghc-devs mailing list
[email protected]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to