I don't think the original question really is about commutativity, but
rather the choice of Monoid instance.

Not being especially mathematically inclined, every once and a while I
> get a little panicked when I notice that, e.g. Data.Map mappend is a
> plain left-biased union, and doesn't actually mappend the values of
> the map.
>

As noted in the reply


> > So there's a range of possible Monoid instances for each type,
>
> More for some types than for others. For Maybe there are three:
>
>  * always take the first/left value;
>  * always take the last/right value;
>  * or, use a semigroup operation defined on the values.
>
> The first two options are provided by the First and Last newtypes, and the
> third option is provided by the instance for Maybe itself (except that it
> spuriously requires a Monoid instance instead of just a semigroup).
>
>
But why does the Map instance of Monoid _not_ mimic the one chosen for
Maybe. I claim this causes unnecessary surprises for users (and lifting the
Monoid instance seems more useful, but that is harder to substantiate).

Jens
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to