|
Control.Monad.ST | Portability | non-portable (requires universal quantification for runST) | Stability | experimental | Maintainer | libraries@haskell.org |
|
|
|
|
|
Description |
This library provides support for strict state threads, as
described in the PLDI '94 paper by John Launchbury and Simon Peyton
Jones Lazy Functional State Threads.
|
|
Synopsis |
|
|
|
|
The ST Monad
|
|
|
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 stToIO).
It serves to keep the internal states of different invocations
of runST separate from each other and from invocations of
stToIO.
The >>= and >> operations are strict in the state (though not in
values stored in the state). For example,
runST (writeSTRef _|_ v >>= f) = _|_ | Instances | |
|
|
|
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.
|
|
|
Allow the result of a state transformer computation to be used (lazily)
inside the computation.
Note that if f is strict, fixST f = _|_.
|
|
Converting ST to IO
|
|
|
RealWorld is deeply magical. It is primitive, but it is not
unlifted (hence ptrArg). We never manipulate values of type
RealWorld; it's only used in the type system, to parameterise State#.
| Instances | |
|
|
|
A monad transformer embedding strict state transformers in the IO
monad. The RealWorld parameter indicates that the internal state
used by the ST computation is a special one supplied by the IO
monad, and thus distinct from those used by invocations of runST.
|
|
Unsafe operations
|
|
|
|
|
|
|
|
Produced by Haddock version 0.9 |