In mathematics, a semigroup is an algebraic structure consisting of a
set together with an associative binary operation. A semigroup
generalizes a monoid in that there might not exist an identity element.
It also (originally) generalized a group (a monoid with all inverses) to
a type where every element did not have to have an inverse, thus the
name semigroup.
WWW: http://github.com/ekmett/semigroups/