
Pete Kazmier wrote:
Derek Elkins
writes: After reading Bryan's post, I switched my right fold to a strict left fold and almost tripled my original speed. Could someone provide some guidelines on when to use each? I thought foldr should be used when building some large data structure such as the map I build. Bryan, out of curiosity, is a non bytestring version of your code faster? http://www.haskell.org/hawiki/StackOverflow
I read the article and understand it, but I am having a hard time applying that specifically to my use of foldr. Here is how I was using foldr:
type WordFreq = M.Map B.ByteString Int
train:: [B.ByteString] -> WordFreq train words = frequencyMap where frequencyMap = foldr incWordCount M.empty words incWordCount w m = M.insertWith (+) w 1 m
So is 'incWordCount' strict in its second argument? I'm still not sure exactly what that means. According to the wiki page, if it is strict in the second argument, I should have used foldl' instead of foldr.
insertWith will definitely need to examine 'm' to perform it's action, therefore it is strict.