[Haskell-cafe] what is the magic hash?

wren ng thornton wren at freegeek.org
Wed Sep 24 00:24:37 EDT 2008

Jason Dusek wrote:
> Derek Elkins <derek.a.elkins at gmail.com> wrote:
>> Jason Dusek wrote:
>>> It is not much covered in the docs. It has something to do
>>>   with magic triggered by a postfix octothorpe?
>> All it does is allow them in identifiers.
>   That's it? So it's for use in conjunction with primitive
>   types, I guess (those seem to be denoted like 'Int#')?
>   With the fancy name and the absence of documentation, I
>   assumed it must be really special.

The octothrorp is for the unboxed/unlifted kind in GHC. In addition to 
the postfix usage it's also used for unboxed tuples (# , #) (# ,, #)... 
which don't actually exist[1], and also as a kinding symbol for these 
native types (as opposed to the * symbol for the usual boxed/lifted kind).

There are various limitations on where you can use types in the # kind, 
which should be in the GHC docs. Unless you're trying to hammer the last 
fraction of performance out of GHC, it's best to leave them alone and 
trust the optimizer to reorganize code to use them. These types of 
performance gains are often more portably gained by using bang patterns 
or strict fields, FWIW.

[1] Each field of the unboxed tuple is stored in a register (or 
otherwise fed directly to its destination).

Live well,

More information about the Haskell-Cafe mailing list