Maximum and Minimum monoids
roma at ro-che.info
Fri Dec 28 11:40:20 CET 2012
* Herbert Valerio Riedel <hvr at gnu.org> [2012-12-28 10:42:06+0100]
> Michael Snoyman <michael at snoyman.com> writes:
> >> Because they're properly represented as semigroups too, just like Min and
> >> Max (i.e. they don't behave sensibly "out of the box" on empty lists). The
> >> semigroups package already provides the proper types and instances. And
> >> just like Min and Max, the semigroups package lets you "lift" its First and
> >> Last into Monoids with the Option type.
> > Just because such a lifting is possible doesn't mean that it will be
> > intuitive or obvious to new users. (I wouldn't know how to make this
> > switch, for example.)
> ...this seems to call for better documentation (including
> examples) of the Data.Semigroup.Option Monoid instance then.
> Do you have an example where it might not be obvious how to use
> Option (Semigroup.First a)
> instead of
> Monoid.First a
I disagree that Monoid.First is not useful by itself.
It solves the problem when you already have a list (or another data
structure) of Maybes, and want to fold them.
Expressing this through Option and Semigroup.First would require more
code and run-time conversions.
More information about the Libraries