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?
Yes. 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. :) Stefan
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe