base-3.0.2.0: Basic librariesContentsIndex
GHC.ST
Portabilitynon-portable (GHC Extensions)
Stabilityinternal
Maintainercvs-ghc@haskell.org
Description
The ST Monad.
Synopsis
newtype ST s a = ST (STRep s a)
type STRep s a = State# s -> (#State# s, a#)
data STret s a = STret (State# s) a
liftST :: ST s a -> State# s -> STret s a
unsafeInterleaveST :: ST s a -> ST s a
fixST :: (a -> ST s a) -> ST s a
runST :: (forall s. ST s a) -> a
runSTRep :: (forall s. STRep s a) -> a
Documentation
newtype ST s a

The strict state-transformer monad. A computation of type ST s a transforms an internal state indexed by s, and returns a value of type a. The s parameter is either

  • an uninstantiated type variable (inside invocations of runST), or
  • RealWorld (inside invocations of Control.Monad.ST.stToIO).

It serves to keep the internal states of different invocations of runST separate from each other and from invocations of Control.Monad.ST.stToIO.

The >>= and >> operations are strict in the state (though not in values stored in the state). For example,

runST (writeSTRef _|_ v >>= f) = _|_
Constructors
ST (STRep s a)
show/hide Instances
type STRep s a = State# s -> (#State# s, a#)
data STret s a
Constructors
STret (State# s) a
liftST :: ST s a -> State# s -> STret s a
unsafeInterleaveST :: ST s a -> ST s a
fixST :: (a -> ST s a) -> ST s a
Allow the result of a state transformer computation to be used (lazily) inside the computation. Note that if f is strict, fixST f = _|_.
runST :: (forall s. ST s a) -> a
Return the value computed by a state transformer computation. The forall ensures that the internal state used by the ST computation is inaccessible to the rest of the program.
runSTRep :: (forall s. STRep s a) -> a
Produced by Haddock version 2.2.2