[Haskell-cafe] Small question

Stefan O'Rear stefanor at cox.net
Thu Aug 9 16:54:45 EDT 2007

On Thu, Aug 09, 2007 at 09:27:23PM +0100, Andrew Coppin wrote:
> OOC, in what way is Bool not "primitive enough"? You mean because it's an 
> algebraic data type, rather than a bunch of bits in the machine? For that 
> matter, just how much space does such a type typically use?


data Bool = False | True

In general, GHC doesn't do "unboxing".  Instead it has a simpler and
more general approach, where it passes the fields of a
single-constructor type instead of the type itself; this is as good as
true unboxing in most of the interesting cases:

data Int = I# Int#
data Float = F# Float#
data Double = D# Double#
data Char = C# Char#
data Ptr = Ptr Addr#

but not always:

data Bool = False | True
data Integer = S# Int# | J# ByteArray# Int#

As far as actual heap usage goes, GHC creates single static values for
all 0-argument constructors; so all Bool WHNFs are one of two addresses,
one for True and one for False.  But GHC isn't quite smart enough for
the -funbox-strict-fields mechanism to understand this...

> (Questions, questions, so many questions...)

I like answering them. :)

-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
Url : http://www.haskell.org/pipermail/haskell-cafe/attachments/20070809/1094fbcd/attachment.bin

More information about the Haskell-Cafe mailing list