Monads (also known as "triples") are a concept from a branch of abstract

algebra known as

category theory. Every monad can be resolved into a family (a

category, actually) of

adjunctions.

One way to think of a monad is as a *notion of computation* over some class of algebras. In programming languages such as Haskell and Opal, the notion of monad is used explicitly to introduce imperative effects into a pure functional regime without compromising important properties such as referential transparency. This is essentially done by reflecting the notion of computation to the object-level of the language itself, rather than relying an evaluation policy (such as call-by-value) at the meta-level to order effects.

This notion of monad has nothing to do with Leibniz monads.