Solver types are an experimental addition to the language supporting the
implementation of constraint solvers. A program may place constraints
on and between variables of a solver type, limiting the values those
variables may take on before they are actually bound. For example, if
X and Y are variables belonging to a constrained integer
solver type, we might place constraints upon them such that X > 3
+ Y and Y =< 7. A later attempt to unify Y with
10 will fail (it would violate the second constraint); similarly
an attempt to unify X with 5 and Y with 4
would fail (it would violate the first constraint).