|
| Control.Monad.ST.Lazy | | Portability | non-portable (requires universal quantification for runST) | | Stability | provisional | | Maintainer | libraries@haskell.org |
|
|
|
|
|
| Description |
| This module presents an identical interface to Control.Monad.ST,
but the underlying implementation of the state thread is lazy (in
the sense that (_|_ >> a is not necessarily equal to _|_).
|
|
| Synopsis |
|
|
|
|
| The ST monad |
|
| data ST s a |
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 of stToIO).
It serves to keep the internal states of different invocations of
runST separate from each other and from invocations of stToIO. | | Instances | |
|
|
| runST :: (forall s . ST s a) -> a |
| 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 |
| 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 |
| 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 |
| Convert a lazy ST computation into a strict one.
|
|
| Converting ST To IO |
|
| data RealWorld |
| A special argument for the ST type constructor,
indexing a state embedded in the IO monad by
stToIO. |
|
|
| stToIO :: ST RealWorld a -> IO a |
| 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. |
|
| Unsafe operations |
|
| unsafeInterleaveST :: ST s a -> ST s a |
|
| unsafeIOToST :: IO a -> ST s a |
|
| Produced by Haddock version 0.6 |