On 16/10/2008, at 21:34, Simon Peyton-Jones wrote:
For strict *constructors*, on the other hand, we *do* guarantee to
evaluate the argument before building the constructor. We generate
a wrapper thus
wC = \ab. case a of { a' -> C a' b }
(Remember 'case' always evaluates in Core.) So for strict
constructors we could take advantage of the known evaluated-ness of
the result to avoid the test.
BUT people who care probably UNPACK their strict fields too, which
is even better. The time you can't do that is for sum types
data T = MkT ![Int]
You also can't do it for polymorphic components. I've used code like:
data T a = MkT !a
foo :: T (a,b) -> a
foo (MkT (x,y)) = x
Here, unpacking doesn't work but foo could still access the components
of the pair directly.
Roman
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users