strictness question

S. Doaitse Swierstra doaitse@cs.uu.nl
Fri, 2 Mar 2001 21:08:45 +0100


Thanks for the prompt reply. Hugs apparently is more lazy and 
performs all the matching lazily, and that really makes a difference 
in my case.

  Doaitse

At 8:11 AM -0800 3/2/01, Simon Peyton-Jones wrote:
>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

-- 
__________________________________________________________________________
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
__________________________________________________________________________