Proposal: Make Semigroup as a superclass of Monoid

Henning Thielemann lemming at
Sun Mar 29 12:29:22 UTC 2015

On Sun, 29 Mar 2015, Jeremy wrote:

> 1. GHC 7.12 will include Semigroup and NonEmpty in base. All Monoid
> instances, and anything else which forms a Semigroup, will have a Semigroup
> instance. GHC will issue a warning when it encounters an instance of Monoid
> which is not an instance of Semigroup.

Good news!

Btw. in my package 'non-empty' I use a more general type:

NonEmpty f a = Cons a (f a)

It allows you to create non-empty Sequences etc. and lists with at least 
two elements (NonEmpty (NonEmpty []) a).

However, inclusion of this type in base or replacing the NonEmpty type 
from "semigroups" is not necessary, since the more general type can stay 
in the "non-empty" package and get an Semigroup instance there.

> The rationale for this change is:
> 3. NonEmpty is often redefined by beginners (or those who don't think it's
> worth having an extra dependency for).

And it is often implemented in unnecessarily complicated ways using GADTs 
or phantom types.

More information about the Libraries mailing list