A type comparer that can record traces of subtype operations
param <: bound if
fromBelow is false,
param >: bound otherwise.
bound is assumed to be in normalized form, as specified in
TypeComparer. In particular, it should not be an alias type,
lazy ref, typevar, wildcard type, error type. In addition, upper bounds may
not be AndTypes and lower bounds may not be OrTypes. This is assured by the
way isSubType is organized.
Subtype test for the application
tp1 = tycon1[args1].
Subtype test for the hk application
tp2 = tycon2[args2].
A new type comparer of the same type as this one, using the given context.
The greatest lower bound of two types
tp1 have a member with name
name whose normalized type is a subtype of
the normalized type of the refinement
Normalization is as follows: If
tp2 contains a skolem to its refinement type,
rebase both itself and the member info of
tp on a freshly created skolem type.
A hook for showing subtype traces. Overridden in ExplainingTypeComparer