<div dir="ltr">thank you Tony and Yitzchak.<div><br></div><div>I may understand it one day ;)</div><div><br></div><div>it is important to understand it alright. I remember spending half a day over unexpected (for me) results of recursive functions that contained folds. In the end I settled for TChan - a queue with predictable behaviour (my view of it - not necessarily correct).</div><div><br></div><div><br></div><div>Yitzchak, how about this:<br></div><div><br></div><div><div>Prelude Control.Applicative> <b>foldl</b> (<|>) Nothing [Just 1, Nothing, Just 2, Nothing]</div><div>Just 1</div><div>Prelude Control.Applicative> <b>foldr</b> (<|>) Nothing [Just 1, Nothing, Just 2, Nothing]</div><div>Just 1</div><div><br></div><div>? I guess this is due to the nature of (<|>), no?</div><div><br></div><div>Anyway, I'd use asum instead of fold_ for Alternatives.</div><div><br></div><div><br></div><div>for non-Alternative cases, Erlang analogy seems to be a useful rule of thumb for foldl & foldr over shorter lists .</div><div><br></div><div>After all, what matters most is what results to expect. <b>foldl</b> and <b>foldr</b> may yield different results for the same list & similar processing fn (save for different arg order).</div>​</div></div>