The theory of mconcat is that it should handle monoids that need to be summed in some special way. I don't know if anyone actually uses it so, however. Still, Reid is right that the circular dependency sets a very high bar.

On Aug 31, 2015 2:47 PM, "Reid Barton" <rwbarton@gmail.com> wrote:
On Mon, Aug 31, 2015 at 1:54 PM, Fermin Reig <ferminreig@fastmail.fm> wrote:
We could generalise:

mconcat:: [a] -> a
mconcat = foldr mappend memtpy

to:

mconcat:: Foldable t => t a -> a
mconcat = foldr mappend memtpy
-- even
-- mconcat = fold

I don't understand the appeal of generalizing the type of a function when the generalization already exists; but in this case it's not a viable option anyways because mconcat is a class method of Monoid, and the definition of the Foldable class already refers to Monoid. Creating a circular dependency of Monoid on Foldable would be a headache best avoided.

Regards,
Reid Barton

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries