Control.Monad.ST.Lazy.Safe
Copyright | (c) The University of Glasgow 2001 |
---|---|
License | BSD-style (see the file libraries/base/LICENSE) |
Maintainer | [email protected] |
Stability | provisional |
Portability | non-portable (requires universal quantification for runST) |
Safe Haskell | Trustworthy |
Language | Haskell2010 |
Description
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 ST monad
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 a
. The s
parameter is either
- an unstantiated type variable (inside invocations of
runST
), or -
RealWorld
(inside invocations ofstToIO
).
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 not strict in the state. For example,
runST
(writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2
runST :: (forall s. ST s a) -> a Source
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.
fixST :: (a -> ST s a) -> ST s a Source
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 ST
strictToLazyST :: ST s a -> ST s a Source
Convert a strict ST
computation into a lazy one. The strict state thread passed to strictToLazyST
is not performed until the result of the lazy state thread it returns is demanded.
lazyToStrictST :: ST s a -> ST s a Source
Convert a lazy ST
computation into a strict one.
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#
.
stToIO :: ST RealWorld a -> IO a Source
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 runST
.
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Control-Monad-ST-Lazy-Safe.html