Type equality on source types. Does not look through
newtypes,
PredTypes or type families, but it does look
through type synonyms. This first checks that the kinds of the types
are equal and then checks whether the types are equal, ignoring casts
and coercions. (The kind check is a recursive call, but since all
kinds have type
Type, there is no need to check the types of
kinds.) See also Note [Non-trivial definitional equality] in
GHC.Core.TyCo.Rep.