control-monad-free-0.5: Free monads and monad transformersSource codeContentsIndex
Control.Monad.Free
Contents
Free Monads
Free Monad Transformers
Translate between Free monad and Free monad transformer computations
Synopsis
module Control.Monad
class (Functor f, Monad m) => MonadFree f m where
free :: m a -> m (Either a (f (m a)))
wrap :: f (m a) -> m a
data Free f a
= Impure (f (Free f a))
| Pure a
isPure :: Free t t1 -> Bool
isImpure :: Free t t1 -> Bool
foldFree :: Functor f => (a -> b) -> (f b -> b) -> Free f a -> b
foldFreeM :: (Functor f, Traversable f, Monad m) => (a -> m b) -> (f b -> m b) -> Free f a -> m b
evalFree :: (a -> b) -> (f (Free f a) -> b) -> Free f a -> b
mapFree :: (Functor f, Functor g) => (forall a. f a -> g a) -> Free f a -> Free g a
mapFreeM :: (Traversable f, Functor g, Monad m) => (forall a. f a -> m (g a)) -> Free f a -> m (Free g a)
newtype FreeT f m a = FreeT {
unFreeT :: m (Either a (f (FreeT f m a)))
}
foldFreeT :: (Traversable f, Monad m) => (a -> m b) -> (f b -> m b) -> FreeT f m a -> m b
foldFreeT' :: (Traversable f, Monad m) => (a -> b) -> (f b -> b) -> FreeT f m a -> m b
mapFreeT :: (Functor f, Functor m) => (forall a. m a -> m' a) -> FreeT f m a -> FreeT f m' a
trans :: (Functor f, Monad m) => Free f a -> FreeT f m a
trans' :: (Functor f, Monad m) => m (Free f a) -> FreeT f m a
untrans :: (Traversable f, Monad m) => FreeT f m a -> m (Free f a)
liftFree :: (Functor f, Monad m) => (a -> Free f b) -> a -> FreeT f m b
Documentation
module Control.Monad
Free Monads
class (Functor f, Monad m) => MonadFree f m whereSource
This type class generalizes over encodings of Free Monads.
Methods
freeSource
::
=> m aOpens a computation and allows to observe the side effects
-> m (Either a (f (m a)))
wrapSource
::
=> f (m a)Wraps a side effect into a monadic computation
-> m a
show/hide Instances
Functor f => MonadFree f (Free f)
Functor f => MonadFree f (C (Free f))
(Functor f, Monad m) => MonadFree f (FreeT f m)
data Free f a Source
Constructors
Impure (f (Free f a))
Pure a
show/hide Instances
Functor f => MonadFree f (Free f)
Functor f => MonadFree f (C (Free f))
Functor f => Monad (Free f)
Functor f => Functor (Free f)
(Functor f, Foldable f) => Foldable (Free f)
Traversable f => Traversable (Free f)
(Eq a, Eq (f (Free f a))) => Eq (Free f a)
(Ord a, Ord (f (Free f a))) => Ord (Free f a)
(Show a, Show (f (Free f a))) => Show (Free f a)
isPure :: Free t t1 -> BoolSource
isImpure :: Free t t1 -> BoolSource
foldFree :: Functor f => (a -> b) -> (f b -> b) -> Free f a -> bSource
foldFreeM :: (Functor f, Traversable f, Monad m) => (a -> m b) -> (f b -> m b) -> Free f a -> m bSource
evalFree :: (a -> b) -> (f (Free f a) -> b) -> Free f a -> bSource
mapFree :: (Functor f, Functor g) => (forall a. f a -> g a) -> Free f a -> Free g aSource
mapFreeM :: (Traversable f, Functor g, Monad m) => (forall a. f a -> m (g a)) -> Free f a -> m (Free g a)Source
Free Monad Transformers
newtype FreeT f m a Source
Constructors
FreeT
unFreeT :: m (Either a (f (FreeT f m a)))
show/hide Instances
foldFreeT :: (Traversable f, Monad m) => (a -> m b) -> (f b -> m b) -> FreeT f m a -> m bSource
foldFreeT' :: (Traversable f, Monad m) => (a -> b) -> (f b -> b) -> FreeT f m a -> m bSource
mapFreeT :: (Functor f, Functor m) => (forall a. m a -> m' a) -> FreeT f m a -> FreeT f m' aSource
Translate between Free monad and Free monad transformer computations
trans :: (Functor f, Monad m) => Free f a -> FreeT f m aSource
trans' :: (Functor f, Monad m) => m (Free f a) -> FreeT f m aSource
untrans :: (Traversable f, Monad m) => FreeT f m a -> m (Free f a)Source
liftFree :: (Functor f, Monad m) => (a -> Free f b) -> a -> FreeT f m bSource
Produced by Haddock version 2.6.0