UnknownType is used when the type of an expression is unknown. VariableType and VariableSignature is used when a type or signature is not fully determined. It can be unified with another Type2 object. All other Type/Term classes in this package are alternate implementations of their interface. They wrap another implementation of this interface and hide any references to VariableTypes. Factory provides a factory for creating these objects.