Containers and folds

wren ng thornton wren at community.haskell.org
Sat Sep 25 18:19:09 EDT 2010


On 9/24/10 1:45 PM, Thomas Schilling wrote:
> Regarding the questions:  I prefer the foldr/l names, because
> otherwise I may need to look up the documentation to figure out which
> fold it is. It's much better to use the standard naming convention
> from lists.  As an example, there is foldM which is actually a left
> fold.  Data.Foldable fixes this and only uses the generic name 'fold'
> for the Monoid case where order does indeed not matter due to
> associativity of mappend.

I agree with both parts of this. That is, foldr/l are the best names for 
when the order is specified. However, sometimes we do have an 
associative operator and don't care about the order. In these latter 
cases I think it's best to offer a "fold" which doesn't specify order in 
order to prevent client code from over-specifying what they mean.

Also, having an order-independent fold allows the library to choose 
whatever kind of fold would be most efficient (possibly changing it over 
time), and allows for things like a parallel implementation for 
overcoming the "fold considered harmful"[1] problem.

[1] 
http://vidiowiki.com/watch/p92te4e/Guy_Steele_foldl_and_foldr_considered_slightly_harmful

-- 
Live well,
~wren


More information about the Libraries mailing list