| 
| Control.Monad.ST | | Portability | non-portable (requires universal quantification for runST) |  | Stability | experimental |  | Maintainer | libraries@haskell.org |  
  |  
  | 
 | 
 | 
 | 
| Description | 
| This library provides support for strict state threads, as
 described in the PLDI '94 paper by John Launchbury and Simon Peyton
 Jones Lazy Functional State Threads.
 | 
 | 
| Synopsis | 
 | 
 | 
 | 
 | 
| The ST Monad
 | 
 | 
 | 
The strict 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 uninstantiated type variable (inside invocations of runST), or
 -  RealWorld (inside invocations of Control.Monad.ST.stToIO).
 
 It serves to keep the internal states of different invocations
 of runST separate from each other and from invocations of
 Control.Monad.ST.stToIO.
 The >>= and >> operations are strict in the state (though not in
 values stored in the state).  For example,
 runST (writeSTRef _|_ v >>= f) = _|_  |    Instances |   |  
  | 
 | 
 | 
| 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 = _|_.
 | 
 | 
| 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#. 
 |    Instances |   |  
  | 
 | 
 | 
| A monad transformer embedding strict 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
 | 
 | 
 | 
 | 
 | 
 | 
 | 
 | 
| Produced by Haddock version 2.6.0 |