deriving-trans-0.2.1.0: Derive instances for monad transformer stacks
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Trans.Compose

Synopsis

Documentation

newtype ComposeT t1 t2 m a Source #

A newtype wrapper for two stacked monad transformers.

Access instances of the intermediate monad (t2 m), whenever t1 implements MonadTrans/MonadTransControl.

Constructors

ComposeT 

Fields

Instances

Instances details
(Monad (t1 (t2 m)), MonadTrans (ComposeT t1 t2), MonadBase b m) => MonadBase b (ComposeT t1 t2 m) Source #

Elevated to m.

Instance details

Defined in Control.Monad.Trans.Compose

Methods

liftBase :: b α -> ComposeT t1 t2 m α #

(Monad (t1 (t2 m)), MonadTransControl (ComposeT t1 t2), MonadBaseControl b m) => MonadBaseControl b (ComposeT t1 t2 m) Source #

Elevated to m.

Instance details

Defined in Control.Monad.Trans.Compose

Associated Types

type StM (ComposeT t1 t2 m) a #

Methods

liftBaseWith :: (RunInBase (ComposeT t1 t2 m) b -> b a) -> ComposeT t1 t2 m a #

restoreM :: StM (ComposeT t1 t2 m) a -> ComposeT t1 t2 m a #

(Monad (t1 (t2 m)), MonadTransControl t1, MonadWriter w (t2 m)) => MonadWriter w (ComposeT t1 t2 m) Source #

Elevated to (t2 m).

Instance details

Defined in Control.Monad.Trans.Compose

Methods

writer :: (a, w) -> ComposeT t1 t2 m a #

tell :: w -> ComposeT t1 t2 m () #

listen :: ComposeT t1 t2 m a -> ComposeT t1 t2 m (a, w) #

pass :: ComposeT t1 t2 m (a, w -> w) -> ComposeT t1 t2 m a #

(Monad (t1 (t2 m)), MonadTrans t1, MonadState s (t2 m)) => MonadState s (ComposeT t1 t2 m) Source #

Elevated to (t2 m).

Instance details

Defined in Control.Monad.Trans.Compose

Methods

get :: ComposeT t1 t2 m s #

put :: s -> ComposeT t1 t2 m () #

state :: (s -> (a, s)) -> ComposeT t1 t2 m a #

(Monad (t1 (t2 m)), MonadTransControl t1, MonadReader r (t2 m)) => MonadReader r (ComposeT t1 t2 m) Source #

Elevated to (t2 m).

Instance details

Defined in Control.Monad.Trans.Compose

Methods

ask :: ComposeT t1 t2 m r #

local :: (r -> r) -> ComposeT t1 t2 m a -> ComposeT t1 t2 m a #

reader :: (r -> a) -> ComposeT t1 t2 m a #

(Monad (t1 (t2 m)), MonadTransControl t1, MonadError e (t2 m)) => MonadError e (ComposeT t1 t2 m) Source #

Elevated to (t2 m).

Instance details

Defined in Control.Monad.Trans.Compose

Methods

throwError :: e -> ComposeT t1 t2 m a #

catchError :: ComposeT t1 t2 m a -> (e -> ComposeT t1 t2 m a) -> ComposeT t1 t2 m a #

(forall (m :: Type -> Type). Monad m => Monad (t2 m), MonadTrans t1, MonadTrans t2) => MonadTrans (ComposeT t1 t2) Source # 
Instance details

Defined in Control.Monad.Trans.Compose

Methods

lift :: Monad m => m a -> ComposeT t1 t2 m a #

(forall (m :: Type -> Type). Monad m => Monad (t2 m), MonadTransControl t1, MonadTransControl t2) => MonadTransControl (ComposeT t1 t2) Source # 
Instance details

Defined in Control.Monad.Trans.Compose

Associated Types

type StT (ComposeT t1 t2) a #

Methods

liftWith :: Monad m => (Run (ComposeT t1 t2) -> m a) -> ComposeT t1 t2 m a #

restoreT :: Monad m => m (StT (ComposeT t1 t2) a) -> ComposeT t1 t2 m a #

Monad (t1 (t2 m)) => Monad (ComposeT t1 t2 m) Source # 
Instance details

Defined in Control.Monad.Trans.Compose

Methods

(>>=) :: ComposeT t1 t2 m a -> (a -> ComposeT t1 t2 m b) -> ComposeT t1 t2 m b #

(>>) :: ComposeT t1 t2 m a -> ComposeT t1 t2 m b -> ComposeT t1 t2 m b #

return :: a -> ComposeT t1 t2 m a #

Functor (t1 (t2 m)) => Functor (ComposeT t1 t2 m) Source # 
Instance details

Defined in Control.Monad.Trans.Compose

Methods

fmap :: (a -> b) -> ComposeT t1 t2 m a -> ComposeT t1 t2 m b #

(<$) :: a -> ComposeT t1 t2 m b -> ComposeT t1 t2 m a #

Applicative (t1 (t2 m)) => Applicative (ComposeT t1 t2 m) Source # 
Instance details

Defined in Control.Monad.Trans.Compose

Methods

pure :: a -> ComposeT t1 t2 m a #

(<*>) :: ComposeT t1 t2 m (a -> b) -> ComposeT t1 t2 m a -> ComposeT t1 t2 m b #

liftA2 :: (a -> b -> c) -> ComposeT t1 t2 m a -> ComposeT t1 t2 m b -> ComposeT t1 t2 m c #

(*>) :: ComposeT t1 t2 m a -> ComposeT t1 t2 m b -> ComposeT t1 t2 m b #

(<*) :: ComposeT t1 t2 m a -> ComposeT t1 t2 m b -> ComposeT t1 t2 m a #

(Monad (t1 (t2 m)), MonadTrans (ComposeT t1 t2), MonadIO m) => MonadIO (ComposeT t1 t2 m) Source #

Elevated to m.

Instance details

Defined in Control.Monad.Trans.Compose

Methods

liftIO :: IO a -> ComposeT t1 t2 m a #

type StT (ComposeT t1 t2) a Source # 
Instance details

Defined in Control.Monad.Trans.Compose

type StT (ComposeT t1 t2) a = StT t2 (StT t1 a)
type StM (ComposeT t1 t2 m) a Source # 
Instance details

Defined in Control.Monad.Trans.Compose

type StM (ComposeT t1 t2 m) a = StM (Elevator (ComposeT t1 t2) m) a

runComposeT Source #

Arguments

:: (forall a. t1 (t2 m) a -> t2 m (StT t1 a))

run t1

-> (forall a. t2 m a -> m (StT t2 a))

run t2

-> forall a. ComposeT t1 t2 m a -> m (StT t2 (StT t1 a)) 

Run a transformer stack.

This function takes the two individual monad transformer runners as arguments.

runComposeT' Source #

Arguments

:: (t1 (t2 m) a -> t2 m a)

run t1

-> (t2 m a -> m a)

run t2

-> ComposeT t1 t2 m a -> m a 

Equivalent to runComposeT, but discards the monadic state StT. This is a simple approach when your monad transformer stack doesn't carry monadic state.

StT (ComposeT t1 t2) a ~ a

This can be used to improve error messages when modifying a monad transformer stack.