[Haskell-cafe] Re: Don't “accidentallyparallelize”
gracjanpolak at gmail.com
Sat Sep 5 09:13:50 EDT 2009
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
where Simon states
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.
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?
More information about the Haskell-Cafe