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 [] # | |

MonadFix Maybe # | |

MonadFix IO # | |

MonadFix Par1 # | |

MonadFix Last # | |

MonadFix First # | |

MonadFix Product # | |

MonadFix Sum # | |

MonadFix Dual # | |

MonadFix NonEmpty # | |

MonadFix Option # | |

MonadFix Last # | |

MonadFix First # | |

MonadFix Max # | |

MonadFix Min # | |

MonadFix Identity # | |

MonadFix ((->) r) # | |

MonadFix (Either e) # | |

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

MonadFix (ST s) # | |

MonadFix (ST s) # | |

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

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

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

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