io-classes-0.2.0.0: Type classes for concurrency with STM, ST and timing
Safe Haskell Safe-Inferred
Language Haskell2010

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 #