io-classes-1.4.1.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 MonadST which allows running ST actions in IO. In this case it is to allow running ST actions within another monad m.

The normal type of MonadST is:

stToIO :: ST RealWorld a -> IO a

We have two approaches to abstracting over this, a new and an older (deprecated) method. The new method borrows the primitive package's PrimMonad and PrimState type family. This gives us:

stToIO :: ST (PrimState m) a -> m a

Which for IO is exactly the same as above. For ST it is identity, while for IOSim it is

stToIO :: ST s a -> IOSim s a

The older (deprecated) method is tricky because we need to not care about both the IO, and also the RealWorld, and it does so avoiding mentioning any s type (which is what the PrimState type family gives access to). The 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

stToIO :: ST (PrimState m) a -> m a Source #

Since: 1.4.1.0

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

Deprecated: Use the simpler MonadST instead.

Deprecated. Use MonadST instead.

Instances

Instances details
MonadST IO Source # 
Instance details

Defined in Control.Monad.Class.MonadST

Methods

stToIO :: ST (PrimState IO) a -> IO a Source #

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

stToIO :: ST (PrimState (ST s)) a -> ST s a Source #

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

(MonadST m, PrimMonad m) => MonadST (ReaderT r m) Source # 
Instance details

Defined in Control.Monad.Class.MonadST

Methods

stToIO :: ST (PrimState (ReaderT r m)) a -> ReaderT r m a Source #

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