[Haskell-beginners] Pound character use in code?

Brandon Allbery allbery.b at gmail.com
Tue Oct 23 15:09:25 CEST 2012

On Tue, Oct 23, 2012 at 4:31 AM, M.v.Gulik <mvgulik at gmail.com> wrote:

> 1) What is the purpose of the used pound/"#" character here. (Looks
> like some type-casting, but that's just a wild guess from me here.

This is not normal Haskell code you're looking at; it's using internals
which are normally hidden, and # is not special in normal Haskell code.  If
you turn on the special meaning (MagicHash) then it usually means that
something is unlifted.

In this case, 1# is an unboxed Int value:  a raw machine word.

> 2) kinda the same for the "I#" in the "len [] ..." line. As the length

I# is the internal constructor for a normal Int value; the value (1 :: Int)
is internally represented as (I# 1#), or the internal Int constructor
wrapping a raw machine word.

> 3) Why is it giving a compile error on the "where" line. Error:

Because # does not have its special meaning in normal Haskell code.

this special behavior, and what you need to do to get it.  But
you should probably not be worrying about it at this point, and almost
certainly not using it.

brandon s allbery kf8nh                               sine nomine associates
allbery.b at gmail.com                                  ballbery at sinenomine.net
unix/linux, openafs, kerberos, infrastructure          http://sinenomine.net
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/beginners/attachments/20121023/3068d907/attachment.htm>

More information about the Beginners mailing list