For A < B, when y ** y ** y is applied to A and x [x <= B], it fails, but when x is bound to B, it succeeds.
This is because two type variables are unified exactly (ie disregarding subtypes) whereas a type operator will take into account subtypes.
It usually is not a problem when types are eagerly fixed --- that is, the most specific type is selected immediately upon application --- since type variables are then taken out of the mix before the problem arises. However, it's still incorrect and there will be situations where it will come back to haunt us.
See also issue #110 for the genesis of this issue.
For
A < B, wheny ** y ** yis applied toAandx [x <= B], it fails, but whenxis bound toB, it succeeds.This is because two type variables are unified exactly (ie disregarding subtypes) whereas a type operator will take into account subtypes.
It usually is not a problem when types are eagerly fixed --- that is, the most specific type is selected immediately upon application --- since type variables are then taken out of the mix before the problem arises. However, it's still incorrect and there will be situations where it will come back to haunt us.
See also issue #110 for the genesis of this issue.