It is definitely the strictness analyzer biting you here.  In ghci,
the behavior of these two programs is identical (stack overflow).  As
kalman said, if you replate sum with foldl' (+) 0 in each of these
programs, the behavior is still identical (correct).

OK, I could replicate that result. Awesome, thanks a lot!

As a side note, one of the monad laws is this:

    return x >>= f  =  f x

So your two programs are semantically equivalent (there's nothing
about IO that forces the evaluation of the list).

OK, thanks, this is an important point. So maybe I should have done this?

main = print $ foldl1' (+) $! take 1000000 randFloats

My intuition tells me that the $! (and `seq`) just reduces one level (to WHNF?). If so, is there a way to force complete evaluation (so that nothing is reducible anymore)?

Thanks,
Milos

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to