use crateSemigroup;
/// In abstract algebra, a `Monoid` is a set equipped with an associative binary operation and an identity element.
/// In category theory, a `Monoid` is a "single object category" equipped with two morphisms:
/// - μ: M ⊗ M → M called multiplication (a.k.a the associative operation of the `Semigroup`)
/// - η: I → M called unit (a.k.a the `mempty` defined in this trait)