Massimo Caliman
by Massimo Caliman
~1 min read

Categories

  • 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.

Example:

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