-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | A monad transformer version of the ST monad
--
-- A monad transformer version of the ST monad Warning! This monad
-- transformer should not be used with monads that can contain multiple
-- answers, like the list monad. The reason is that the state token will
-- be duplicated across the different answers and this causes Bad Things
-- to happen (such as loss of referential transparency). Safe monads
-- include the monads State, Reader, Writer, Maybe and combinations of
-- their corresponding monad transformers.
@package stt
@version 0.2.1
module Control.Monad.Trans.ST.Internal
-- | STT is the monad transformer providing polymorphic updateable
-- references
newtype STT s m a
STT :: (State# s -> m (STTRet s a)) -> STT s m a
[unSTT] :: STT s m a -> State# s -> m (STTRet s a)
data STTRet s a
STTRet :: (State# s) -> a -> STTRet s a
-- | Allow the result of a state transformer computation to be used
-- (lazily) inside the computation. Note that if f is strict, fixSTT f =
-- _|_.
fixSTT :: (MonadFix m) => (a -> STT s m a) -> STT s m a
instance GHC.Base.Functor (Control.Monad.Trans.ST.Internal.STTRet s)
instance GHC.Base.Functor m => GHC.Base.Functor (Control.Monad.Trans.ST.Internal.STT s m)
instance (GHC.Base.Monad m, GHC.Base.Functor m) => GHC.Base.Applicative (Control.Monad.Trans.ST.Internal.STT s m)
instance GHC.Base.Monad m => GHC.Base.Monad (Control.Monad.Trans.ST.Internal.STT s m)
instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.ST.Internal.STT s)
instance Control.Monad.Fix.MonadFix m => Control.Monad.Fix.MonadFix (Control.Monad.Trans.ST.Internal.STT s m)
instance GHC.Base.Monad m => Control.Monad.Primitive.PrimMonad (Control.Monad.Trans.ST.Internal.STT s m)
instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Control.Monad.Trans.ST.Internal.STT s m)
instance Control.Monad.Reader.Class.MonadReader r m => Control.Monad.Reader.Class.MonadReader r (Control.Monad.Trans.ST.Internal.STT s m)
instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Control.Monad.Trans.ST.Internal.STT s' m)
instance Control.Monad.Writer.Class.MonadWriter w m => Control.Monad.Writer.Class.MonadWriter w (Control.Monad.Trans.ST.Internal.STT s m)
-- | This library provides a monad transformer version of the ST monad.
-- Warning! This monad transformer should not be used with monads that
-- can contain multiple answers, like the list monad. The reason is that
-- the will be duplicated across the different answers and this cause Bad
-- Things to happen (such as loss of referential transparency). Safe
-- monads include the monads State, Reader, Writer, Maybe and
-- combinations of their corresponding monad transformers.
module Control.Monad.Trans.ST
-- | STT is the monad transformer providing polymorphic updateable
-- references
data STT s m a
-- | Executes a computation in the STT monad transformer
runSTT :: Monad m => (forall s. STT s m a) -> m a
-- | Allow the result of a state transformer computation to be used
-- (lazily) inside the computation. Note that if f is strict, fixSTT f =
-- _|_.
fixSTT :: (MonadFix m) => (a -> STT s m a) -> STT s m a
-- | Create a new reference
newSTTRef :: Monad m => a -> STT s m (STRef s a)
-- | Reads the value of a reference
readSTTRef :: Monad m => STRef s a -> STT s m a
-- | Modifies the value of a reference
writeSTTRef :: Monad m => STRef s a -> a -> STT s m ()
-- | Creates a new mutable array
newSTTArray :: (Ix i, Monad m) => (i, i) -> e -> STT s m (STArray s i e)
-- | Retrieves an element from the array
readSTTArray :: (Ix i, Monad m) => STArray s i e -> i -> STT s m e
-- | Modifies an element in the array
writeSTTArray :: (Ix i, Monad m) => STArray s i e -> i -> e -> STT s m ()
-- | Copy a mutable array and turn it into an immutable array
freezeSTTArray :: (Ix i, Monad m) => STArray s i e -> STT s m (Array i e)
-- | Copy an immutable array and turn it into a mutable array
thawSTTArray :: (Ix i, Monad m) => Array i e -> STT s m (STArray s i e)
-- | A safe way to create and work with a mutable array before returning an
-- immutable array for later perusal. This function avoids copying the
-- array before returning it.
runSTTArray :: (Ix i, Monad m) => (forall s. STT s m (STArray s i e)) -> m (Array i e)
unsafeIOToSTT :: (Monad m) => IO a -> STT s m a
unsafeSTToIO :: STT s IO a -> IO a