|Copyright||(c) The University of Glasgow 2001|
|License||BSD-style (see the file libraries/base/LICENSE)|
|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
ST s a transforms an internal state indexed by
s, and returns a value of type
s parameter is either
RealWorld(inside invocations of
runST(writeSTRef _|_ v >>= f) = _|_
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 = _|_.
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
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
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).