
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. Simon | -----Original Message----- | From: glasgow-haskell-users-bounces@haskell.org [mailto:glasgow-haskell-users- | bounces@haskell.org] On Behalf Of Adrian Hey | Sent: 13 January 2005 11:55 | To: glasgow-haskell-users@haskell.org | Subject: Unboxed Tuples | | Hello, | | Does the user guide documentation for these reflect current ghc compiler? | | Para. 7.2.2 says they can only be deconstructed using case expressions | but by accident I've found they seem to work fine in let bindings too | (with ghc version 6.2.2). | | Not that I'm complaining (I always thought using case expressions was | just too painful :-). I just wanted to check that this is a feature | I can rely on in future (and if so suggest the user guide should be | ammended to reflect this). | | Regards | -- | Adrian Hey | | _______________________________________________ | Glasgow-haskell-users mailing list | Glasgow-haskell-users@haskell.org | http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

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
participants (2)
-
Adrian Hey
-
Simon Peyton-Jones