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