# 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