# strictness question

**Simon Peyton-Jones
**
simonpj@microsoft.com

*Fri, 2 Mar 2001 08:11:41 -0800*

Strange. You don't supply a complete program, so it's hard to
test.
Nevertheless, the Haskell Report (Sect 3.12) specifies that
a let adds a single twiddle. Thus
let (x, (y,z)) = e in b
means
let x = case e of (x,(y,z)) -> x
y = case e of (x,(y,z)) -> y
z = case e of (x,(y,z)) -> z
in b
And that is what GHC implements. You get something different if you
add twiddles inside:
let (x, ~(y,z)) = e in b
means
let x = case e of (x,_) -> x
y = case e of (_,(y,_)) -> y
etc
Adding more twiddles means less eager matching. I don't know whether
Hugs implements this.
Simon
|* -----Original Message-----
*|* From: S. Doaitse Swierstra [mailto:doaitse@cs.uu.nl]
*|* Sent: 01 March 2001 11:26
*|* To: haskell@haskell.org
*|* Subject: strictness question
*|*
*|*
*|* I ran into a difference between GHC and Hugs. The following code:
*|*
*|* f (P p) ~(P q) = P (\ k -> \inp -> let (((pv, (qv, r)), m), st) =
*|* p (q k) inp
*|* in (((pv qv , r ), m), st))
*|*
*|* runs fine with Hugs but blows up with GHC, whereas:
*|*
*|* f (P p) ~(P q) = P (\ k -> \inp -> let ~(~(~(pv, ~(qv, r)), m),
*|* st) = p (q k) inp
*|* in (((pv qv , r ), m), st))
*|*
*|* runs fine with GHC too.
*|*
*|* From the Haskell manual I understand that pattern matching
*|* in "let"'s
*|* should be done lazily, so the addition of a collection of ~'s should
*|* not make a difference. Am I right with this interpretation?
*|*
*|* A possible source of this problem may be origination from the smarter
*|* GHC optimiser, but in that case the optimiser is not doing its work
*|* well.
*|*
*|* Doaitse Swierstra
*|*
*|*
*|*
*|*
*|* --
*|* ______________________________________________________________
*|* ____________
*|* S. Doaitse Swierstra, Department of Computer Science, Utrecht
*|* University
*|* P.O.Box 80.089, 3508 TB UTRECHT, the
*|* Netherlands
*|* Mail: mailto:doaitse@cs.uu.nl
*|* WWW: http://www.cs.uu.nl/
*|* PGP Public Key:
*http://www.cs.uu.nl/people/doaitse/
tel: +31 (30) 253 3962, fax: +31 (30) 2513791
__________________________________________________________________________
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell