Next: Abstract solver type declarations, Up: Solver types [Contents]

Variables with solver types can have one of three possible insts: `free`

,
`ground`

or `any`

.
A variable with a solver type with inst `any`

may not (yet) be
semantically ground, in the following sense: if a variable is semantically
ground then the set of values it unifies with form an equivalence class; if a
variable is non-ground then the set of values it unifies with do not form an
equivalence class.

More formally, `X`

is ground if for values `Y`

and
`Z`

that unify with `X`

, it is the case that `Y`

and
`Z`

also unify with each other. `X`

is non-ground if there
are values `Y`

and `Z`

that unify with `X`

, but which do
not unify with each other.

A non-solver type value will have inst `any`

if it is constructed using
one or more inst `any`

values.

The builtin modes `ia`

and `oa`

are equivalent to `in(any)`

and `out(any)`

respectively.