Portability | portable |
---|---|

Stability | experimental |

Maintainer | libraries@haskell.org |

Monadic fixpoints.

For a detailed discussion, see Levent Erkok's thesis,
*Value Recursion in Monadic Computations*, Oregon Graduate Institute, 2002.

# Documentation

class Monad m => MonadFix m whereSource

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

, for strict`mfix`

(`Control.Monad.liftM`

h . f) =`Control.Monad.liftM`

h (`mfix`

(f . h))`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.