
| 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