Unboxed Tuples
Adrian Hey
ahey at iee.org
Mon Feb 7 08:02:54 EST 2005
On Monday 07 Feb 2005 9:28 am, Simon Peyton-Jones wrote:
> Good point. Yes you can rely on it; but the binding is lazy. So for
> this
>
> h :: Int -> (# String, String #)
> h = ...
>
>
> f x = let (# p,q #) = h x in ...
>
> you'll get
>
> f x = let (p,q) = case h x of (# p,q #) -> (p,q)
> in ...
>
> So the call to h only happens when either p or q is used.
>
> On the other hand, if any of the binders in a let-pattern has an
> unlifted type (e.g. Int#) then the whole pattern match becomes strict.
> So if p or q had an unlifted type, the match would be strict.
>
> I'll add a note to the usre manual.
Thanks. Sorry if I'm being a bit dim, but could you tell me if ghc
will optimise out the boxed tuple construction in both these cases?
I guess the answer must be yes in the second case because AFAIK
you can't build an ordinary tuple containing an Int#. (But maybe
I'm wrong.)
Regards
--
Adrian Hey
More information about the Glasgow-haskell-users
mailing list