[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