[Haskell-cafe] foldl to foldl' , ok ; but with foldM ?

minh thu noteed at gmail.com
Sun May 14 07:38:33 EDT 2006

Hi, I know the question is raised often but i cannot find the answer.

In a previous mail, I was said to use foldl' instead of foldl and it
worked really well :

   acc1 values = foldl1' (+) values

How is foldl' defined ?

I have two other related questions :

What if I want to write something like this :

   foldl' f emptyArray values

where f accumulates a value into an array.
What's the best representation for an array here ?

Also, given the fact that I though to represent my array with a c-like
Ptr Word8 array,
i tried this code, where the accumulator is referenced by an IORef :

acc2 ints = do
     accRef <- newIORef 0
     foldM add accRef ints
     acc <- readIORef accRef
     putStrLn $ show acc
     return acc
 where add accRef i = do
         modifyIORef accRef (+ i)
         return accRef

but it's far worse than the code with foldl'.
I guess someone will tell me to try to strictify something... but I
don't know what and how.
I think trying to strictify the accRef is worthless : it's the
referenced acc that needs to be evaluated. Is-it correct ?

Thanks !!
VO Minh Thu

More information about the Haskell-Cafe mailing list