| Copyright | (c) The University of Glasgow 1992-2002 | 
|---|---|
| License | see libraries/base/LICENSE | 
| Maintainer | cvs-ghc@haskell.org | 
| Stability | internal | 
| Portability | non-portable (GHC Extensions) | 
| Safe Haskell | Unsafe | 
| Language | Haskell2010 | 
GHC.ST
Contents
Description
The ST Monad.
Documentation
The strict ST monad.
 The ST monad allows for destructive updates, but is escapable (unlike IO).
 A computation of type ST s aa, and
 execute 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 strict in the state (though not in
 values stored in the state).  For example,
runST (writeSTRef _|_ v >>= f) = _|_Instances
| MonadFail (ST s) # | Since: base-4.11.0.0 | 
| MonadFix (ST s) # | Since: base-2.1 | 
| Defined in Control.Monad.Fix | |
| Applicative (ST s) # | Since: base-4.4.0.0 | 
| Functor (ST s) # | Since: base-2.1 | 
| Monad (ST s) # | Since: base-2.1 | 
| Monoid a => Monoid (ST s a) # | Since: base-4.11.0.0 | 
| Semigroup a => Semigroup (ST s a) # | Since: base-4.11.0.0 | 
| Show (ST s a) # | Since: base-2.1 | 
runST :: (forall s. ST s a) -> a #
Return the value computed by a state thread.
 The forall ensures that the internal state used by the ST
 computation is inaccessible to the rest of the program.
Unsafe functions
unsafeInterleaveST :: ST s a -> ST s a #
unsafeInterleaveST allows an ST computation to be deferred
 lazily.  When passed a value of type ST a, the ST computation will
 only be performed when the value of the a is demanded.
unsafeDupableInterleaveST :: ST s a -> ST s a #
unsafeDupableInterleaveST allows an ST computation to be deferred
 lazily.  When passed a value of type ST a, the ST computation will
 only be performed when the value of the a is demanded.
The computation may be performed multiple times by different threads,
 possibly at the same time. To prevent this, use unsafeInterleaveST instead.
Since: base-4.11