Thanks for great response! Brent Yorgey <byorgey <at> seas.upenn.edu> writes: > > x `pseq` y guarantees to evaluate x before y. There is no such > guarantee with x `seq` y; the only guarantee with `seq` is that x > `seq` y will be _|_ if x is. >
I found an old thread here http://www.mail-archive.com/glasgow-haskell-us...@haskell.org/msg11022.html where Simon states [quote] Indeed, if GHC was in the habit of causing the second argument of seq to be evaluated before the first, then a lot of people would probably be surprised. eg. imagine what happens to foldl': foldl' f a [] = a foldl' f a (x:xs) = let a' = f a x in a' `seq` foldl' f a' xs It wouldn't do what you want at all. [/quote] So... seems foldl' relies on `seq` having unstated evaluation order in GHC. So, what guarantees does foldl' have in turn? Semantics only or operational? Shouldn't it be written using `pseq`? Seems I have always used (this `seq` that) when I meant (this `before` that). Is it time to revisit my code and use `pseq` more? What does Haskell' say about this? -- Gracjan _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe