Re-exports from Control.Monad.ST.Internal

#ST Source

data ST :: Region -> Type -> Type

The ST type constructor allows local mutation, i.e. mutation which does not "escape" into the surrounding computation.

An ST computation is parameterized by a phantom type which is used to restrict the set of reference cells it is allowed to access.

The run function can be used to run a computation in the ST monad.


#while Source

while :: forall a r. ST r Boolean -> ST r a -> ST r Unit

Loop while a condition is true.

while b m is ST computation which runs the ST computation b. If its result is true, it runs the ST computation m and loops. If not, the computation ends.

#run Source

run :: forall a. (forall r. ST r a) -> a

Run an ST computation.

Note: the type of run uses a rank-2 type to constrain the phantom type h, such that the computation must not leak any mutable references to the surrounding computation. It may cause problems to apply this function using the $ operator. The recommended approach is to use parentheses instead.

#foreach Source

foreach :: forall a r. Array a -> (a -> ST r Unit) -> ST r Unit

Loop over an array of values.

ST.foreach xs f runs the computation returned by the function f for each of the inputs xs.

#for Source

for :: forall a r. Int -> Int -> (Int -> ST r a) -> ST r Unit

Loop over a consecutive collection of numbers

ST.for lo hi f runs the computation returned by the function f for each of the inputs between lo (inclusive) and hi (exclusive).

#Region Source

data Region :: Type

ST is concerned with restricted mutation. Mutation is restricted to a region of mutable references. This kind is inhabited by phantom types which represent regions in the type system.