|Copyright||(c) The University of Glasgow 2001|
|License||BSD-style (see the file libraries/base/LICENSE)|
|Portability||non-portable (requires universal quantification for runST)|
Deprecated: Safe is now the default, please use Control.Monad.ST.Lazy instead
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
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 >>= readSTRef _|_ >> return 2) = 2
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 = _|_.
Convert a lazy
ST computation into a strict one.
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 lazy 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).