Additionally, it is only adding complexity to the surface language; I believe the type checker itself would have to be able to model disjunctions, whether or not it is exposed directly to the programmer.
Absolutely, but wouldn't the disjunction across the small set of conditions for a conformance chain be less complex than support for general disjunctive generic constraints? Or maybe they aren't that different?
These are statically dispatched, meaning if T is lexically a generic type that is only known to be Comparable, that's the function that will always be called, even if it ends up being Int or String at runtime. E.g.
I see. Yes, this is a challenge. So maybe the existing behavior should be matched, then? Use the implementation that can be satisfied by the info available without performing additional checks? I'm trying to think through the impact.