| 
| Control.Monad.Fix | | Portability | portable |  | Stability | experimental |  | Maintainer | libraries@haskell.org |  
  |  
  | 
 | 
| Description | 
Monadic fixpoints.
 For a detailed discussion, see Levent Erkok's thesis,
 Value Recursion in Monadic Computations, Oregon Graduate Institute, 2002.
  | 
 | 
| Synopsis | 
 | 
 | 
 | 
| Documentation | 
 | 
 | 
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.
  |   |  | Methods |  | mfix ::  (a -> m a) -> m a | Source |  
  |  | The fixed point of a monadic computation.
 mfix f executes the action f only once, with the eventual
 output fed back as the input.  Hence f should not be strict,
 for then mfix f would diverge.
 |  
  |   |    Instances |   |  
  | 
 | 
 | 
| fix f is the least fixed point of the function f,
 i.e. the least defined x such that f x = x.
 | 
 | 
| Produced by Haddock version 2.6.0 |