| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell2010 |
Control.Monad.Class.MonadST
Synopsis
- class Monad m => MonadST m where
- withLiftST :: (forall s. (forall a. ST s a -> m a) -> b) -> b
Documentation
class Monad m => MonadST m where Source #
This class is for abstracting over stToIO which allows running ST
actions in IO. In this case it is to allow running ST actions within
another monad m.
The type of stToIO is:
stToIO : ST RealWorld a -> IO a
Abstracting over this is tricky because we need to not care about both
the IO, and also the RealWorld.
A solution is to write an action that is given the liftST as an argument
and where that action itself is polymorphic in the s parameter. This
allows us to instantiate it with RealWorld in the IO case, and the local
s in a case where we are embedding into another ST action.
Methods
withLiftST :: (forall s. (forall a. ST s a -> m a) -> b) -> b Source #
Instances
| MonadST IO Source # | |
Defined in Control.Monad.Class.MonadST Methods withLiftST :: (forall s. (forall a. ST s a -> IO a) -> b) -> b Source # | |
| MonadST (ST s) Source # | |
Defined in Control.Monad.Class.MonadST Methods withLiftST :: (forall s0. (forall a. ST s0 a -> ST s a) -> b) -> b Source # | |
| MonadST m => MonadST (ReaderT r m) Source # | |
Defined in Control.Monad.Class.MonadST Methods withLiftST :: (forall s. (forall a. ST s a -> ReaderT r m a) -> b) -> b Source # | |