io-classes
Safe HaskellNone
LanguageHaskell2010

Control.Monad.Class.MonadST

Synopsis

Documentation

class PrimMonad m => MonadST (m :: Type -> Type) 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 normal type of stToIO 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.

Minimal complete definition

stToIO

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 stToIO instead.

Deprecated. Use stToIO 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 #