Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Control.Monad.Trans.MultiWriter
Description
The multi-valued version of mtl's Writer / WriterT / MonadWriter
Synopsis
- newtype MultiWriterT (x :: [Type]) (m :: Type -> Type) a = MultiWriterT {
- runMultiWriterTRaw :: StateT (HList x) m a
- type MultiWriterTNull = MultiWriterT ('[] :: [Type])
- type MultiWriter (x :: [Type]) a = MultiWriterT x Identity a
- class (Monad m, Monoid a) => MonadMultiWriter a (m :: Type -> Type) where
- mTell :: a -> m ()
- runMultiWriterT :: forall (w :: [Type]) m a. (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w)
- runMultiWriterTAW :: forall (w :: [Type]) m a. (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w)
- runMultiWriterTWA :: forall (w :: [Type]) m a. (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w, a)
- runMultiWriterTW :: forall (w :: [Type]) m a. (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w)
- runMultiWriterTNil :: Monad m => MultiWriterT ('[] :: [Type]) m a -> m a
- runMultiWriterTNil_ :: Functor m => MultiWriterT ('[] :: [Type]) m a -> m ()
- withMultiWriter :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w)
- withMultiWriterAW :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w)
- withMultiWriterWA :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (w, a)
- withMultiWriterW :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m w
- withMultiWriters :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1)
- withMultiWritersAW :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1)
- withMultiWritersWA :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1, a)
- withMultiWritersW :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1)
- mapMultiWriterT :: forall m a (w :: [Type]) m' a'. (m (a, HList w) -> m' (a', HList w)) -> MultiWriterT w m a -> MultiWriterT w m' a'
- mGetRaw :: forall (m :: Type -> Type) (a :: [Type]). Monad m => MultiWriterT a m (HList a)
- mPutRaw :: forall (m :: Type -> Type) (s :: [Type]). Monad m => HList s -> MultiWriterT s m ()
MultiWriterT
newtype MultiWriterT (x :: [Type]) (m :: Type -> Type) a Source #
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 wherea
is an arbitrary type andb
is the rest list.
For example,
MultiWriterT '[Int, Bool] :: (* -> *) -> (* -> *)
is a Writer transformer containing the types [Int, Bool].
Constructors
MultiWriterT | |
Fields
|
Instances
type MultiWriterTNull = MultiWriterT ('[] :: [Type]) Source #
A MultiWriter transformer carrying an empty state.
type MultiWriter (x :: [Type]) a = MultiWriterT x Identity a Source #
MonadMultiWriter class
class (Monad m, Monoid a) => MonadMultiWriter a (m :: Type -> Type) where Source #
Instances
run-functions
runMultiWriterT :: forall (w :: [Type]) m a. (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w) Source #
runMultiWriterTAW :: forall (w :: [Type]) m a. (Monoid (HList w), Functor m) => MultiWriterT w m a -> m (a, HList w) Source #
runMultiWriterTWA :: forall (w :: [Type]) m a. (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w, a) Source #
runMultiWriterTW :: forall (w :: [Type]) m a. (Monoid (HList w), Monad m) => MultiWriterT w m a -> m (HList w) Source #
runMultiWriterTNil :: Monad m => MultiWriterT ('[] :: [Type]) m a -> m a Source #
runMultiWriterTNil_ :: Functor m => MultiWriterT ('[] :: [Type]) m a -> m () Source #
with-functions (single Writer)
withMultiWriter :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w) Source #
withMultiWriterAW :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (a, w) Source #
withMultiWriterWA :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m (w, a) Source #
withMultiWriterW :: forall w (m :: Type -> Type) (ws :: [Type]) a. (Monoid w, Monad m) => MultiWriterT (w ': ws) m a -> MultiWriterT ws m w Source #
with-functions (multiple Writers)
withMultiWriters :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1) Source #
withMultiWritersAW :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (a, HList w1) Source #
withMultiWritersWA :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1, a) Source #
withMultiWritersW :: forall (w1 :: [Type]) (w2 :: [Type]) (m :: Type -> Type) a. (Monoid (HList w1), Monad m, HInit w1) => MultiWriterT (Append w1 w2) m a -> MultiWriterT w2 m (HList w1) Source #
other functions
mapMultiWriterT :: forall m a (w :: [Type]) m' a'. (m (a, HList w) -> m' (a', HList w)) -> MultiWriterT w m a -> MultiWriterT w m' a' Source #
Map both the return value and the state of a computation using the given function.