Massimo Caliman
by Massimo Caliman
~1 min read


  • Programming

In the world of functional programming, monads can be defined as algebraic structures that encapsulate values and computations, providing a coherent interface for the management of computational contexts.

This definition, although more formal, maintains the essence of the monad concept as a container for values and behaviour.

To highlight the structural and algebraic aspect of monads, we can use the following formulation:

  • A monad M is a triplet (T, η, μ) where:
    • T is a functor
    • η is a natural isomorphism between the functor unit T and the empty object
    • μ is a bind operation

In some other fashion, the triplet (T, η, μ) defines the rules for the manipulation of values within the monad, ensuring consistent and uniform behaviour.


The monad Maybe, used to handle null values, can be defined as:

  • T(x) = x or None (represents the encapsulated data type).
  • η(x) = Just x (converts a normal value to a Maybe value)
  • μ(f, mx) = bind f mx (combines a function f with a Maybe value mx)

This formal definition, although it may seem difficult at first sight, provides a solid basis for understanding the inner workings of monads and their power in functional programming