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.

- class Sharing m where
- class Shareable m a where
- class Convertible m a b where
- convArgs :: (forall c d. Convertible m c d => c -> m d) -> a -> m b

- convert :: Convertible m a b => a -> m b

# Documentation

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.

convArgs :: (forall c d. Convertible m c d => c -> m d) -> a -> m bSource

Monad m => Convertible m Char Char | |

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

convert :: Convertible m a b => a -> m bSource

Converts a convertible value recursively.