Bools are not unboxed
Simon Marlow
simonmar at microsoft.com
Wed Oct 6 06:07:18 EDT 2004
On 06 October 2004 00:53, John Meacham wrote:
> On Tue, Oct 05, 2004 at 01:48:30PM +0100, Simon Marlow wrote:
>> It would probably be better to return 0#/1# instead of a Bool from
>> the comparison primops, because this would expose slightly more
>> detail to the simplifier and might result in slightly better code in
>> some cases (but no dramatic improvements). It would also let us
>> remove a bit of complexity from the code generator.
>
> This seems like it could be nicely generalized such that all
> enumeration types unbox to the unboxed integer of their offset. so
>
> data Perhaps = Yes | Maybe | No
>
> can unbox to an Int# with 0# == Yes 1# == Maybe and 2# == No.
Yes, a strict enumeration should be implemented as an Int#, both in the
strictness analyser and also when you {-# UNPACK #-} a constructor
field. This is something we'd like to try, but haven't got around to it
yet. Maybe a good bite-sized project for a budding GHC hacker? :-)
> Then we get the Bool optimization for free.
The original question was about the primitive comparisons, so I think
we'd still have to change the types of these primitives. Furthermore
we'd probably have to teach the compiler that the result of the
comparison primops is compatible with a strict Bool. It wouldn't be
entirely free.
Cheers,
Simon
More information about the Glasgow-haskell-users
mailing list