# Monoid

*This article is a stub. You can help by expanding it.*

A monoid is an algebraic structure with an associative binary operation that has an identity element. Examples include:

- lists under concatenation
- numbers under addition or multiplication
- Booleans under conjunction or disjunction
- sets under union
- functions from a type to itself, under composition

A Monoid class is defined in Data.Monoid, and used in Data.Foldable and in the Writer monad.

The monoid interface enables a number of algorithms, including parallel algorithms and tree searches, e.g.:

- An introduction: Haskell Monoids and their Uses
- The blog article Monoids and Finger Trees
- Monad.Reader issue 11, "How to Refold a Map." (PDF), and a follow up

Generalizations of monoids feature in Category theory, for example: