2008/3/1, Milos Hasan <[EMAIL PROTECTED]>: > 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)?
In fact with this code you won't have any problem since the foldl1' will consume strictly the elements as soon as take produce them, avoiding any accumulation of thunk by randoms. Now if you were to put a sort in there (supposedly to do something else than a simple sum...), you could have a need for a function that reduce the list and its elements : > forceList [] = () > forceList (x:xs) = x `seq` forceList xs > > main = print $ foldl1' (+) $ (\xs -> forceList xs `seq` sort xs) $ take > 1000000 randFloats In Ghci it don't work (probably because the tail call in forceList isn't optimised) but compiled it will work fine. -- Jedaï _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe