I would say a good practice with folds (and maybe in Haskell in general) is that either all be strict or all be lazy.<br><br>In the expression: <span style="font-family: courier new,monospace;">foldXX f init list</span>:<br>

<br>Remember that foldr does:<br>
x `f` ( ... the accumulator ... )<br>
and foldl:<br>
(... the accumulator ...) `f` x<br>
<br>The accumulator has to match a non-strict argument of<b> f</b>, so that <b>f</b> will be able to return results <i>even if</i> the accumulator is not fully evaluated.<br><br>More detailed:<br>if <b>f</b> is lazy in its second argument, then use foldr. Everything is lazy, you build a very small thunk since nothing is evaluated.<br>

In the rare cases where<b> f </b>is (also) lazy in its first argument, you can use foldl.<br>And of course, if <b>f</b> is strict in both its arguments, then use foldl&#39;. Everything is then strict, you build no thunk.<br>

<br><br><br><div class="gmail_quote">2011/11/20 David Fox <span dir="ltr">&lt;<a href="mailto:ddssff@gmail.com">ddssff@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Does anyone have a quick way to decide which of the fold functions to<br>
use in a given situation?  There are times when I would like to find<br>
out which to use in the quickest way possible, rather than reading a<br>
long explanation of why each one behaves the way it does.<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br>