Stability | experimental |
---|---|
Maintainer | Sebastian Fischer <mailto:sebf@informatik.uni-kiel.de> |
This library provides an interface to monads that support explicit sharing. A project website with tutorials can be found at http://sebfisch.github.com/explicit-sharing.
- module Control.Monad
- class MonadPlus s => Sharing s where
- class Shareable m a where
- class Convertible m a b where
- convert :: a -> m b
- collect :: Nondet n => (forall s. Sharing s => s n) -> n
- hasResult :: (forall s. Sharing s => s a) -> Bool
- results :: Ord a => (forall s. Sharing s => s a) -> Set a
- resultDist :: Ord a => (forall s. Sharing s => s a) -> Map a Rational
- resultList :: (forall s. Sharing s => s a) -> IO [a]
- unsafeResults :: (forall s. Sharing s => s a) -> [a]
Documentation
module Control.Monad
Classes
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 |
Observation functions
resultList :: (forall s. Sharing s => s a) -> IO [a]Source
unsafeResults :: (forall s. Sharing s => s a) -> [a]Source