Modulebase-4.23.0.0Haskell2010
Control.Monad.ST.Strict
The strict ST monad (re-export of Control.Monad.ST)
- 2 types
- 3 values
- Packagebase-4.23.0.0
- Exports5
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceStrict.hs
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.
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) = _|_Instances7Monad, Functor, MonadFix, Applicative, Show, Semigroup, …
Monad (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.STFunctor (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.STMonadFix (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.Control.Monad.FixApplicative (ST s)Defined in ghc-internal-10.0.0 · GHC.Internal.STShow (ST s a)Defined in ghc-internal-10.0.0 · GHC.Internal.STSemigroup a => Semigroup (ST s a)Defined in ghc-internal-10.0.0 · GHC.Internal.STMonoid a => Monoid (ST s a)Defined in ghc-internal-10.0.0 · GHC.Internal.ST
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#.