Before looking at monads in any detail at all, it is worth considering why they might be an interesting subject to know about. In this post I will allow myself to mention a lot of complicated mathematical structures as illustrations. Many of these may be unfamiliar, depending on your background. We shall return to ground level in the next post.

Monads can be considered from many different points of view. Depending on your perspective, a monad is:

• A monoid in the category of endofunctors.
• A categorification of a closure operator.
• A (strict) 2-functor with domain the monoidal category of finite ordinals.
• A (lax) 2-functor with domain the terminal bicategory.
• A single object category enriched in a bicategory.
• A functional programming abstraction for computational effects.
• A presentation independent formulation of an algebraic theory.
• A mapping of objects to term objects, with coherent insertion of generators and composition of families of terms.
• A mapping of objects to term objects, with coherent insertion of generators and extension operations.

Although much of the terminology is probably baffling at this point, the key point is that this variety gives us many ways to start attacking a problem. The different viewpoints also suggest alternative ways in which the notion of monad can be generalized. For example, there are graded monads, indexed monads, pseudo-monads, relative monads to name but a few.

For any mathematical abstraction to be useful, there should be plenty of examples. A surprisingly wide range of structures can be seen as monads:

• Many “container like” structures, such as lists, sets, multisets and trees form monads.
• Closure operators in order theory and topology are monads.
• Free object constructions for algebraic theories form monads.
• Preorders and categories themselves are monads.
• Enriched and internal categories are monads.
• Monoids.