The only other difference between a type expression and an ordinary expression is that, in a type expression, the name of an abstract type variable is intended to represent not the current set of values assigned to the variable at the time the type expression is evaluated, but the set of values assigned to it at the time the type check is made.
At the moment, only type expressions of the forms
variable-name set of variable-name list of variable-namebehave as if they are re-evaluated every time a type check is made.