[Haskell-cafe] Questioning seq
Albert Y. C. Lai
trebla at vex.net
Fri Apr 15 00:31:10 CEST 2011
On 11-04-14 01:57 PM, Andrew Coppin wrote:
> 3. How is pseq different from seq?
An example to show that there are non-unique evaluation orders to
fulfill the mere strictness promise of seq:
import Data.List(foldl')
() & () = ()
main = print (foldl' (&) () (replicate 2500000 ()))
with ghc with -O0 : fast, no stack overflow
with ghc with -O or -O2: slow, stack overflow
ghc versions 6.12.3, 7.0.2, 7.0.3
Look at the core code (-ddump-simpl) to verify evaluation orders.
Repeat the experiment and observations with pseq:
import GHC.Conc(pseq)
() & () = ()
foldl' :: (a -> b -> a) -> a -> [b] -> a
foldl' op z xs = go z xs where
go z [] = z
go z (x:xs) = let z' = op z x in z' `pseq` go z' xs
main = print (foldl' (&) () (replicate 2500000 ()))
More information about the Haskell-Cafe
mailing list