The problem is that in both (2left) and (2right), the context has Q.id
, P.id
, P
witness, and the fact that self
conforms to P
and Q
. So why does y.id
refers to Q.id
, but self.id
within y
refers to P witness.id
. It’d be fine if both prints P
, or both print Q
, but that’s not the case.
As is, there is something difference between the two, there must be, but both the conformance information, and implementation availability are the same, which is a problem. The only difference I can see now is the fact that I’m calling one inside a Self
method, and another is outside, but that’s hardly a justification.
I could explain away why (2right) is P
or why (2left) is Q
, the problem now is that there’s nothing preventing me from applying (2right) explanation to (2left), and vice versa.