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