| Safe Haskell | Safe |
|---|---|
| Language | Haskell2010 |
Control.Monad.Trans.Unlift
Description
See overview in the README.md
- class (MonadTransControl t, Forall (Identical t)) => MonadTransUnlift t
- newtype Unlift t = Unlift {}
- askUnlift :: forall t m. (MonadTransUnlift t, Monad m) => t m (Unlift t)
- askRun :: (MonadTransUnlift t, Monad (t m), Monad m) => t m (t m a -> m a)
- class (MonadBaseControl b m, Forall (IdenticalBase m)) => MonadBaseUnlift b m | m -> b
- newtype UnliftBase b m = UnliftBase {
- unliftBase :: forall a. m a -> b a
- askUnliftBase :: forall b m. MonadBaseUnlift b m => m (UnliftBase b m)
- askRunBase :: MonadBaseUnlift b m => m (m a -> b a)
- class MonadTrans t where
- class (Applicative b, Applicative m, Monad b, Monad m) => MonadBase b m | m -> b where
- liftBase :: b α -> m α
- class MonadTrans t => MonadTransControl t where
- class MonadBase b m => MonadBaseControl b m | m -> b where
Trans
class (MonadTransControl t, Forall (Identical t)) => MonadTransUnlift t #
A monad transformer which can be unlifted, obeying the monad morphism laws.
Since 0.1.0
Instances
| (MonadTransControl t, Forall * (Identical t)) => MonadTransUnlift t # | |
A function which can move an action down the monad transformer stack, by providing any necessary environment to the action.
Note that, if ImpredicativeTypes worked reliably, this type wouldn't be
necessary, and askUnlift would simply include a more generalized type.
Since 0.1.0
askUnlift :: forall t m. (MonadTransUnlift t, Monad m) => t m (Unlift t) #
Get the Unlift action for the current transformer layer.
Since 0.1.0
askRun :: (MonadTransUnlift t, Monad (t m), Monad m) => t m (t m a -> m a) #
A simplified version of askUnlift which addresses the common case where
polymorphism isn't necessary.
Since 0.1.0
Base
class (MonadBaseControl b m, Forall (IdenticalBase m)) => MonadBaseUnlift b m | m -> b #
A monad transformer stack which can be unlifted, obeying the monad morphism laws.
Since 0.1.0
Instances
| (MonadBaseControl b m, Forall * (IdenticalBase m)) => MonadBaseUnlift b m # | |
newtype UnliftBase b m #
Similar to Unlift, but instead of moving one layer down the stack, moves
the action to the base monad.
Since 0.1.0
Constructors
| UnliftBase | |
Fields
| |
askUnliftBase :: forall b m. MonadBaseUnlift b m => m (UnliftBase b m) #
Get the UnliftBase action for the current transformer stack.
Since 0.1.0
askRunBase :: MonadBaseUnlift b m => m (m a -> b a) #
A simplified version of askUnliftBase which addresses the common case
where polymorphism isn't necessary.
Since 0.1.0
Reexports
class MonadTrans t where #
The class of monad transformers. Instances should satisfy the
following laws, which state that lift is a monad transformation:
Instances
| MonadTrans ListT | |
| MonadTrans MaybeT | |
| Monoid w => MonadTrans (WriterT w) | |
| MonadTrans (StateT s) | |
| MonadTrans (ExceptT e) | |
| MonadTrans (ErrorT e) | |
| MonadTrans (IdentityT *) | |
| MonadTrans (StateT s) | |
| Monoid w => MonadTrans (WriterT w) | |
| MonadTrans (ReaderT * r) | |
| MonadTrans (ContT * r) | |
| Monoid w => MonadTrans (RWST r w s) | |
| Monoid w => MonadTrans (RWST r w s) | |
class (Applicative b, Applicative m, Monad b, Monad m) => MonadBase b m | m -> b where #
Instances
| MonadBase [] [] | |
| MonadBase Maybe Maybe | |
| MonadBase IO IO | |
| MonadBase Identity Identity | |
| MonadBase STM STM | |
| MonadBase b m => MonadBase b (MaybeT m) | |
| MonadBase b m => MonadBase b (ListT m) | |
| (Monoid w, MonadBase b m) => MonadBase b (WriterT w m) | |
| (Monoid w, MonadBase b m) => MonadBase b (WriterT w m) | |
| MonadBase b m => MonadBase b (StateT s m) | |
| MonadBase b m => MonadBase b (StateT s m) | |
| MonadBase b m => MonadBase b (IdentityT * m) | |
| MonadBase b m => MonadBase b (ExceptT e m) | |
| (Error e, MonadBase b m) => MonadBase b (ErrorT e m) | |
| MonadBase b m => MonadBase b (ReaderT * r m) | |
| MonadBase b m => MonadBase b (ContT * r m) | |
| (Monoid w, MonadBase b m) => MonadBase b (RWST r w s m) | |
| (Monoid w, MonadBase b m) => MonadBase b (RWST r w s m) | |
| MonadBase ((->) r) ((->) r) | |
| MonadBase (Either e) (Either e) | |
| MonadBase (ST s) (ST s) | |
| MonadBase (ST s) (ST s) | |
class MonadTrans t => MonadTransControl t where #
Associated Types
type StT (t :: (* -> *) -> * -> *) a :: * #
Monadic state of t.
For clarity, because haddock does not display associated types, below are
the elaborated StT definitions provided by this library:
StTIdentityTa ~ a StTMaybeTa ~Maybea StT (ErrorTe) a ~Errore =>Eithere a StT (ExceptTe) a ~Eithere a StTListTa ~ [a] StT (ReaderTr) a ~ a StT (StateTs) a ~ (a, s) StT (WriterTw) a ~Monoidw => (a, w) StT (RWSTr w s) a ~Monoidw => (a, s, w)
Instances
| MonadTransControl ListT | |
| MonadTransControl MaybeT | |
| Monoid w => MonadTransControl (WriterT w) | |
| MonadTransControl (StateT s) | |
| MonadTransControl (ExceptT e) | |
| Error e => MonadTransControl (ErrorT e) | |
| MonadTransControl (IdentityT *) | |
| MonadTransControl (StateT s) | |
| Monoid w => MonadTransControl (WriterT w) | |
| MonadTransControl (ReaderT * r) | |
| Monoid w => MonadTransControl (RWST r w s) | |
| Monoid w => MonadTransControl (RWST r w s) | |
class MonadBase b m => MonadBaseControl b m | m -> b where #
Associated Types
type StM (m :: * -> *) a :: * #
Monadic state of m.
For all non-transformer monads, StM m a ~ a:
StMIOa ~ a StMMaybea ~ a StM (Eithere) a ~ a StM [] a ~ a StM ((->) r) a ~ a StMIdentitya ~ a StMSTMa ~ a StM (STs) a ~ a
All transformer monads' StM depends on both the monadic state of the
transformer (given by its StT from MonadTransControl), as well as its
inner monad's monadic state, given by its StM from MonadBaseControl:
StM (IdentityTm) a ~ StM m a StM (MaybeTm) a ~ StM m (Maybea) StM (ErrorTe m) a ~Errore => StM m (Eithere a) StM (ExceptTe m) a ~ StM m (Eithere a) StM (ListTm) a ~ StM m [a] StM (ReaderTr m) a ~ StM m a StM (StateTs m) a ~ StM m (a, s) StM (WriterTw m) a ~Monoidw => StM m (a, w) StM (RWSTr w s m) a ~Monoidw => StM m (a, s, w)
Instances