foldl to foldl' , ok ; but with foldM ?

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
participants (1)
-
minh thu