multistate-0.7.1.2: like mtl's ReaderT / WriterT / StateT, but more than one contained value/type.

Safe HaskellSafe
LanguageHaskell2010

Control.Monad.Trans.MultiWriter

Contents

Description

The multi-valued version of mtl's Writer / WriterT / MonadWriter

Synopsis

MultiWriterT

newtype MultiWriterT x m a #

A Writer transformer monad patameterized by:

  • x - The list of types that can be written (Monoid instances).
  • m - The inner monad.

MultiWriterT corresponds to mtl's WriterT, but can contain a heterogenous list of types.

This heterogenous list is represented using Types.Data.List, i.e:

  • '[] - The empty list,
  • a ': b - A list where a is an arbitrary type and b is the rest list.

For example,

MultiWriterT '[Int, Bool] :: (* -> *) -> (* -> *)

is a Writer transformer containing the types [Int, Bool].

Constructors

MultiWriterT 

Fields

Instances

(Monad m, ContainsType a c, Monoid a) => MonadMultiWriter a (MultiWriterT c m) # 

Methods

mTell :: a -> MultiWriterT c m () #

MonadState s m => MonadState s (MultiWriterT c m) # 

Methods

get :: MultiWriterT c m s

put :: s -> MultiWriterT c m ()

state :: (s -> (a, s)) -> MultiWriterT c m a

MonadWriter w m => MonadWriter w (MultiWriterT c m) # 

Methods

writer :: (a, w) -> MultiWriterT c m a

tell :: w -> MultiWriterT c m ()

listen :: MultiWriterT c m a -> MultiWriterT c m (a, w)

pass :: MultiWriterT c m (a, w -> w) -> MultiWriterT c m a

MonadBase b m => MonadBase b (MultiWriterT c m) # 

Methods

liftBase :: b α -> MultiWriterT c m α

MonadBaseControl b m => MonadBaseControl b (MultiWriterT c m) # 

Associated Types

type StM (MultiWriterT c m :: * -> *) a :: *

Methods

liftBaseWith :: (RunInBase (MultiWriterT c m) b -> b a) -> MultiWriterT c m a

restoreM :: StM (MultiWriterT c m) a -> MultiWriterT c m a

MonadTrans (MultiWriterT x) # 

Methods

lift :: Monad m => m a -> MultiWriterT x m a #

MonadTransControl (MultiWriterT c) # 

Associated Types

type StT (MultiWriterT c :: (* -> *) -> * -> *) a :: *

Methods

liftWith :: Monad m => (Run (MultiWriterT c) -> m a) -> MultiWriterT c m a

restoreT :: Monad m => m (StT (MultiWriterT c) a) -> MultiWriterT c m a

Monad m => Monad (MultiWriterT x m) # 

Methods

(>>=) :: MultiWriterT x m a -> (a -> MultiWriterT x m b) -> MultiWriterT x m b #

(>>) :: MultiWriterT x m a -> MultiWriterT x m b -> MultiWriterT x m b #

return :: a -> MultiWriterT x m a #

fail :: String -> MultiWriterT x m a #

Functor f => Functor (MultiWriterT x f) # 

Methods

fmap :: (a -> b) -> MultiWriterT x f a -> MultiWriterT x f b #

(<$) :: a -> MultiWriterT x f b -> MultiWriterT x f a #

MonadFix m => MonadFix (MultiWriterT w m) # 

Methods

mfix :: (a -> MultiWriterT w m a) -> MultiWriterT w m a #

(Applicative m, Monad m) => Applicative (MultiWriterT x m) # 

Methods

pure :: a -> MultiWriterT x m a #

(<*>) :: MultiWriterT x m (a -> b) -> MultiWriterT x m a -> MultiWriterT x m b #

(*>) :: MultiWriterT x m a -> MultiWriterT x m b -> MultiWriterT x m b #

(<*) :: MultiWriterT x m a -> MultiWriterT x m b -> MultiWriterT x m a #

MonadIO m => MonadIO (MultiWriterT c m) # 

Methods

liftIO :: IO a -> MultiWriterT c m a #

(Functor m, Applicative m, MonadPlus m) => Alternative (MultiWriterT c m) # 

Methods

empty :: MultiWriterT c m a #

(<|>) :: MultiWriterT c m a -> MultiWriterT c m a -> MultiWriterT c m a #

some :: MultiWriterT c m a -> MultiWriterT c m [a] #

many :: MultiWriterT c m a -> MultiWriterT c m [a] #

MonadPlus m => MonadPlus (MultiWriterT c m) # 

Methods

mzero :: MultiWriterT c m a #

mplus :: MultiWriterT c m a -> MultiWriterT c m a -> MultiWriterT c m a #

type StT (MultiWriterT c) a # 
type StT (MultiWriterT c) a = (a, HList c)
type StM (MultiWriterT c m) a # 
type StM (MultiWriterT c m) a = ComposeSt (MultiWriterT c) m a

type MultiWriterTNull = MultiWriterT '[] #

A MultiWriter transformer carrying an empty state.

MonadMultiWriter class

class (Monad m, Monoid a) => MonadMultiWriter a m where #

Minimal complete definition

mTell

Methods

mTell :: a -> m () #

Instances

(MonadTrans t, Monad (t m), MonadMultiWriter a m) => MonadMultiWriter a (t m) # 

Methods

mTell :: a -> t m () #

(Monad m, ContainsType a c, Monoid a) => MonadMultiWriter a (MultiWriterT c m) # 

Methods

mTell :: a -> MultiWriterT c m () #

(Monad m, ContainsType a c, Monoid a) => MonadMultiWriter a (MultiWriterT c m) # 

Methods

mTell :: a -> MultiWriterT c m () #

(Monad m, ContainsType a w, Monoid a) => MonadMultiWriter a (MultiRWST r w s m) # 

Methods

mTell :: a -> MultiRWST r w s m () #

(Monad m, ContainsType a w, Monoid a) => MonadMultiWriter a (MultiRWST r w s m) # 

Methods

mTell :: a -> MultiRWST r w s m () #

run-functions

runMultiWriterT :: (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w) #

runMultiWriterTAW :: (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w) #

runMultiWriterTWA :: (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w, a) #

runMultiWriterTW :: (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w) #

runMultiWriterTNil :: Monad m => MultiWriterT '[] m a -> m a #

runMultiWriterTNil_ :: Functor m => MultiWriterT '[] m a -> m () #

with-functions (single Writer)

withMultiWriter :: (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w) #

withMultiWriterAW :: (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w) #

withMultiWriterWA :: (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (w, a) #

withMultiWriterW :: (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m w #

with-functions (multiple Writers)

withMultiWriters :: forall w1 w2 m a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1) #

withMultiWritersAW :: forall w1 w2 m a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1) #

withMultiWritersWA :: forall w1 w2 m a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1, a) #

withMultiWritersW :: forall w1 w2 m a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1) #

other functions

mapMultiWriterT :: (m (a, HList w) -> m' (a', HList w)) -> MultiWriterT w m a -> MultiWriterT w m' a' #

Map both the return value and the state of a computation using the given function.

mGetRaw :: Monad m => MultiWriterT a m (HList a) #

A raw extractor of the contained HList (i.e. the complete state).

mPutRaw :: Monad m => HList s -> MultiWriterT s m () #