
| > You'd still need several versions of the code for a polymorphic function, one | > for pointer values, one for 4-byte non-pointers, one for 8-byte non-pointers | > etc. | | Yes, but that's up to the user. A type variable always has a particular | kind, so for instance one might want an array over any 4-byte | non-pointer value: | | data Array4 (a :: #4) | | Functions on Array4 only need one version of code. This makes | polymorphism less useful, of course, but the goal here is to be closer | to the machine. Ah, now I see what you mean. I had not thought of doing that, but it'd make sense, esp if there were lots of 4-byte-non-pointer types. But there are only a couple (Int# and Word32#) so I'm not sure it's worth the effort. But (without thinking about it too hard) it looks like a very sensible idea. The trickiness is in the fact that some type constructors (notably (->)) are somewhat kind-polymorphic, which gives rise to some awkwardness in the type checker. So the details might not be entirely straightforward. Simon