io-classes-1.0.0.0: Type classes for concurrency with STM, ST and timing
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Monad.Class.MonadST

Synopsis

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

Instances details
MonadST IO Source # 
Instance details

Defined in Control.Monad.Class.MonadST

Methods

withLiftST :: (forall s. (forall a. ST s a -> IO a) -> b) -> b Source #

MonadST (ST s) Source # 
Instance details

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 # 
Instance details

Defined in Control.Monad.Class.MonadST

Methods

withLiftST :: (forall s. (forall a. ST s a -> ReaderT r m a) -> b) -> b Source #