In
functional programming, a
monad is a structure that represents
computations defined as sequences of steps: a
type with a monad structure defines what it means to
chain operations, or nest
functions of that type together. This allows the programmer to build
pipelines that process data in steps, in which each action is
decorated with additional processing rules provided by the monad. As such, monads have been described as "programmable semicolons"; a semicolon is the operator used to chain together individual
statements in many
imperative programming languages, thus the expression implies that extra code will be executed between the statements in the pipeline. Monads have also been explained with a
physical metaphor as
assembly lines, where a conveyor belt transports data between functional units that transform it one step at a time. They can also be seen as a functional
design pattern to build
generic types.