Maximum and Minimum monoids

Roman Cheplyaka roma at
Fri Dec 28 19:07:28 CET 2012

* Gabriel Gonzalez <gabriel439 at> [2012-12-28 10:32:23-0600]
> I am definitely in favor of adding "semigroups" to the platform if
> drops the containers dependency.  Optionally, we could then fix the
> Monoid instance for Maybe so that it has a proper semigroup context
> and we wouldn't have to use the Option type.  I would be happy with
> that solution.  However, if we do that then rename the types to "Max"
> and "Min" instead of "Maximum and "Minimum", since "Maybe (Max a)" is
> long enough as it is.

1. Actually, Max and Min are already there. No need to rename or do

2. The problem isn't that semigroups is not in the platform.
   The problems are:

   1. base already defines a (bad) Monoid instance for Maybe. We'll need
      to ditch it (and possibly break some code by doing that).
   2. Both Monoid and Maybe are defined in base, while Semigroup isn't.
      So, such an instance will be orphaned.

So, the best solution seems to be to merge semigroups into base.
My proposal would be to move only Data.Semigroup to base, as it will
lead to significant simplification, but leave other modules (NonEmpty,
Natural) in a separate package, since they are of limited applicability
and would gain nothing by being inside base.


More information about the Libraries mailing list