[Haskell-cafe] Re: [Haskell] Re: Boxing (Day) Question

Simon Peyton-Jones simonpj at microsoft.com
Wed Jan 4 04:48:05 EST 2006


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


More information about the Haskell-Cafe mailing list