Comment on page

Monad Laws

There are three laws that monad instances must satisfy to be valid:
  • Left Identity -> (return x) >>= f = f x
The left identity law states that if we simply use return on a value before binding it to the function f, the result should be the same as simply applying f x directly.
  • Right Identity -> m >>= return = m
The right identity law states that if have some monadic value m (or an expression that computes to this monadic value) and bind it to the return function, the result should be simply the same value m.
  • Associativity -> (m >>= f) >>= g = m >>= (\x -> f x >>= g)
The associativity law states that if have some monadic value m and want to create a chain binding for functions f and g (applying f first, and the result of that application to g), then it should not matter whether we nest the two binding functions, as long as the order of application is preserved.