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