The strict
ST monad. The
ST monad allows for destructive
updates, but is escapable (unlike IO). A computation of type
ST s a returns a value of type
a, 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) = _|_