| Copyright | (c) The University of Glasgow 2001 | 
|---|---|
| License | BSD-style (see the file libraries/base/LICENSE) | 
| Maintainer | libraries@haskell.org | 
| Stability | provisional | 
| Portability | non-portable (requires universal quantification for runST) | 
| Safe Haskell | Trustworthy | 
| Language | Haskell2010 | 
Control.Monad.ST.Lazy
Description
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.
The ST monad
The lazy STIO).
 A computation of type ST s aa, and
 executes in "thread" s. The s parameter is either
- an uninstantiated 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.
The >>= and >> operations are not strict in the state.  For example,
runST (writeSTRef _|_ v >>= readSTRef _|_ >> return 2) = 2Converting 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.
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#.