| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Monad.Trans.Control.Identity
Synopsis
- class MonadTransControl t => MonadTransControlIdentity t where
- liftWithIdentity :: Monad m => ((forall x. t m x -> m x) -> m a) -> t m a
- class MonadBaseControl b m => MonadBaseControlIdentity b m | m -> b where
- liftBaseWithIdentity :: ((forall x. m x -> b x) -> b a) -> m a
- defaultLiftBaseWithIdentity :: (MonadBaseControlIdentity b m, MonadTransControlIdentity t) => ((forall x. t m x -> b x) -> b a) -> t m a
MonadTransControlIdentity
class MonadTransControl t => MonadTransControlIdentity t where Source #
The MonadTransControlIdentity type class is a stronger version of
MonadTransControl:
MonadTransControl instances are aware of the monadic state of the
transformer and allow to save and restore this state.
MonadTransControlIdentity instances on the other hand exist only for
exactly those transformers, that don't have any monadic state.
So for any instance of this class this should hold:
forall a. StT t a ~ aThis can't be given as a constraint to the class due to limitations
regarding the TypeFamilies extension.
Methods
liftWithIdentity :: Monad m => ((forall x. t m x -> m x) -> m a) -> t m a Source #
Instances
| MonadTransControlIdentity (IdentityT :: (Type -> Type) -> Type -> Type) Source # | |
Defined in Control.Monad.Trans.Control.Identity | |
| MonadTransControlIdentity (ReaderT r) Source # | |
Defined in Control.Monad.Trans.Control.Identity | |
MonadTransControlIdentity instances can easily be created for
monad transformers, because of the superclass MonadTransControl:
newtype ExampleT = ... deriving (Monad,MonadTrans) instanceMonadTransControlExampleT where ... instanceMonadTransControlIdentityExampleT whereliftWithIdentityf =liftWith$ \ runT -> f runT
MonadBaseControlIdentity
Regarding the IO base monad this can be seen as an alternative,
but equivalent, way to implement MonadUnliftIO.
class MonadBaseControl b m => MonadBaseControlIdentity b m | m -> b where Source #
The MonadBaseControlIdentity type class is a stronger version of
MonadBaseControl.
Just like MonadTransControlIdentity instances of
MonadBaseControlIdentity hold no monadic state:
forall a. StM m a ~ aMethods
liftBaseWithIdentity :: ((forall x. m x -> b x) -> b a) -> m a Source #
Instances
MonadBaseControlIdentity instances can be created just as
easily for monad transformers:
instanceMonadBaseControlIdentityb m =>MonadBaseControlIdentityb (ExampleT m) whereliftBaseWithIdentity=defaultLiftBaseWithIdentity
defaultLiftBaseWithIdentity :: (MonadBaseControlIdentity b m, MonadTransControlIdentity t) => ((forall x. t m x -> b x) -> b a) -> t m a Source #