Stability | experimental |
---|---|

Maintainer | Sebastian Fischer <mailto:sebf@informatik.uni-kiel.de> |

This library provides type classes for explicit sharing of monadic
effects. Usually you don't need to import this library as it is
reexported by the module `Control.Monad.Sharing`

. You may want to
do so, however, when writing your own implementation of explicit
sharing.

# Documentation

class MonadPlus s => Sharing s whereSource

Interface of monads that support explicit sharing.

class Shareable m a whereSource

Interface of shareable nested monadic data types. The provided
function `shareArgs`

is supposed to map the given function on every
monadic argument.

We provide instances of the `Shareable`

class for some predefined
Haskell types. For flat types the function `shareArgs`

just returns
its argument which has no arguments to which the given function
could be applied.

class Convertible m a b whereSource

Interface for convertible datatypes. The provided function
`convArgs`

is supposed to map the given function on every argument
of the given value and combine the results to give the converted
value.

We provide instances of the `Convertible`

class for some predefined
Haskell types. For flat types the function `convArgs`

just returns
its argument which has no arguments to which the given function
could be applied.

Monad m => Convertible m Char Char | |

Monad m => Convertible m Double Double | |

Monad m => Convertible m Float Float | |

Monad m => Convertible m Integer Integer | |

Monad m => Convertible m Int Int | |

Monad m => Convertible m Bool Bool | |

(Monad m, Convertible m a b) => Convertible m [m a] [b] | An instance to convert lists with monadic elements into ordinary lists. |

(Monad m, Convertible m a b) => Convertible m [a] [m b] | An instance to convert ordinary lists into lists with monadic elements. |

Monad m => Convertible m [Char] [Char] | |

Monad m => Convertible m [Double] [Double] | |

Monad m => Convertible m [Float] [Float] | |

Monad m => Convertible m [Integer] [Integer] | |

Monad m => Convertible m [Int] [Int] | |

Monad m => Convertible m [Bool] [Bool] | |

(Monad m, Convertible m a b) => Convertible m [a] (List m b) | This instance enables the function |

(Monad m, Convertible m a b) => Convertible m (List m a) [b] | This instance enables the function |