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