
Hello John, Thursday, August 3, 2006, 1:25:45 AM, you wrote:
evaluated. If the contents of the constructor itself can be packed into the other 30 bits, then there's no need for a pointer at all. For enumerated types, you can use all 31 bits for the tag, since only 1 bit is required to indicate evaluated/unevaluated and no pointer is needed.
Not just for enumerated types, but for any constructors that don't have any components (independent of other constructors). as in 'Nothing' from Maybe could be represented this way.
the main condition is to use some special Int30# type instead of Int# (which we got used to be 32 bits long). i.e. for the type [Char}, where Char= C# Int30# it will be ok, but for [Int] it will be bad (i know about Haskell standard, but how many programs relies on 32-bit Ints?) -- Best regards, Bulat mailto:Bulat.Ziganshin@gmail.com