|Portability||non-portable (requires universal quantification for runST)|
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.
The strict state-transformer monad.
A computation of type
transforms an internal state indexed
ST s a
s, and returns a value of type
s parameter is either
- an uninstantiated type variable (inside invocations of
RealWorld(inside invocations of
It serves to keep the internal states of different invocations
runST separate from each other and from invocations of
runST(writeSTRef _|_ v >>= f) = _|_
Return the value computed by a state transformer computation.
forall ensures that the internal state used by the
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 = _|_
RealWorld is deeply magical. It is primitive, but it is not
ptrArg). We never manipulate values of type
RealWorld; it's only used in the type system, to parameterise