A monad is a data type of composable actions. Monad
is the class of type constructors whose values represent such actions. Perhaps IO
is the most recognizable one: a value of IO a
is a "recipe for retrieving an a
value from the real world".
We say a type constructor m
(such as []
or Maybe
) forms a monad if there is an instance Monad m
satisfying certain laws about composition of actions. We can then reason about m a
as an "action whose result has type a
".