`module Monoid: `sig` .. `end``
A monoid set.

A monoid is a set closed under an associative binary operation `plus` and a `zero` element that is neutral to the `plus` operation.

Good examples are numeric types with addition and zero, or multiplication and one, see Monoid.Int.Sum, Monoid.Int.Product, Monoid.Float.Sum, Monoid.Float.Product.

Containers are also usually form a monoid with an empty container being a neutral element, and the being the closure, e.g., Monoid.List, Monoid.Stack, Monoid.String, Monoid.Set.

`module type Base = `sig` .. `end``
The minimal monoid interface
`module type S = `sig` .. `end``
The monoid interface
`module Make `(``M`` : ``Base``) `: `S``  with type t := M.t``
Make(Base) derives a monoid from its minimal definition
`module Unit: `S``  with type t = unit``
a trivial monoid
`module TList `(``T`` : ``Std.T``) `: `sig` .. `end``
Concretizes `'a list` to `T.t list`
`module Stack: `sig` .. `end``
A list monoid that accumulates data in a reversed order.
`module List: `sig` .. `end``
A monoid that accumulates data in a list.
`module String: `S``  with type t = string``
A monoid on strings.
`module Set: `sig` .. `end``
A set monoind.
`module Int: `sig` .. `end``
Provides monoids in the Z domain.
`module Float: `sig` .. `end``
Provides monoids in the R domain.