# Control.Monad.ST.Internal

- Package
- purescript-st
- Repository
- purescript/purescript-st

### #Region Source

`data Region`

`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.

### #ST Source

`data ST :: Region -> Type -> Type`

`data ST t0 t1`

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.

#### Instances

### #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 `r`

, 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.