Copyright | (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2002 |
---|---|

License | BSD-style (see the file libraries/base/LICENSE) |

Maintainer | libraries@haskell.org |

Stability | experimental |

Portability | portable |

Safe Haskell | Trustworthy |

Language | Haskell2010 |

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 where Source #

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`

(`liftM`

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

MonadFix [] Source # | |

MonadFix Maybe Source # | |

MonadFix IO Source # | |

MonadFix Par1 Source # | |

MonadFix Last Source # | |

MonadFix First Source # | |

MonadFix Product Source # | |

MonadFix Sum Source # | |

MonadFix Dual Source # | |

MonadFix NonEmpty Source # | |

MonadFix Option Source # | |

MonadFix Last Source # | |

MonadFix First Source # | |

MonadFix Max Source # | |

MonadFix Min Source # | |

MonadFix Identity Source # | |

MonadFix ((->) r) Source # | |

MonadFix (Either e) Source # | |

MonadFix f => MonadFix (Rec1 f) Source # | |

MonadFix (ST s) Source # | |

MonadFix (ST s) Source # | |

(MonadFix f, MonadFix g) => MonadFix ((:*:) f g) Source # | |

MonadFix f => MonadFix (Alt * f) Source # | |

MonadFix f => MonadFix (M1 i c f) Source # | |

(MonadFix f, MonadFix g) => MonadFix (Product * f g) Source # | |