MonadFix
Monads having fixed points with a 'knot-tying' semantics. Instances of MonadFix should satisfy the following laws:
* purity mfix (return . h) = return (fix h)
* left shrinking (or tightening) mfix (\x -> a >>= \y -> f x y) = a >>= \y -> mfix (\x -> f x y)
* sliding mfix (Control.Monad.liftM h . f) = Control.Monad.liftM h (mfix (f . h)), for strict h.
* nesting mfix (\x -> mfix (\y -> f x y)) = mfix (\x -> f x x)
This class is used in the translation of the recursive do notation supported by GHC and Hugs.