|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 module presents an identical interface to Control.Monad.ST, except that the monad delays evaluation of state operations until a value depending on them is required.
Safe API only.
The lazy 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 unstantiated type variable (inside invocations of
RealWorld(inside invocations of
runST(writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2
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 = _|_
Converting between strict and lazy
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