Monoid

Monoid

Type signature

public interface Monoid<T> : SemiGroup<T> {
    T Empty
}

class (Semigroup a) <= Monoid a where
    empty :: a

Monoid Laws:

The empty value doesn't change the meaning of a monoidal value.
a <> empty == a
empty <> a == a

Usage/Feature of semigroup:

Semigroup/Monoid are domain modeling tools.