bug in language definition (strictness)

Simon Peyton-Jones simonpj at microsoft.com
Tue Sep 1 17:56:07 EDT 2009


| This suggests a natural implementation (and specification) for pseq,
| 
| pseq :: a -> b -> b
| pseq x y = x `seq` lazy y
| 
| where lazy :: a -> a is a compiler provided function equivalent to 'id'
| except that it is considered lazy in its argument by the strictness
| analyzer.

Exactly so!  Here is the definition of `pseq` in GHC.Conc:

Conc.lhs:368:pseq :: a -> b -> b
Conc.lhs:369:pseq  x y = x `seq` lazy y


And 'lazy' is documented in the user manual:
	http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim/GHC-Prim.html#v%3Alazy

Simon


More information about the Haskell-prime mailing list