Closed
Description
Compiler version
3.3.0
Minimized example
This test currently fails:
abstract class A[X]:
def foo(x: X): X
class IO
class C
def test(io: {*} IO) =
class B extends A[{io} C]: // error, but should work
override def foo(x: {io} C): {io} C = ???
Output
7 | class B extends A[{io} C]:
| ^
|class B needs to be abstract, since def foo(x: X): X in class A is not defined
|(Note that
| parameter X in def foo(x: X): X in class A does not match
| parameter {io} C in override def foo(x: {io} C): {io} C in class B
| )
*/
Expectation
Arguably there should be a way to achieve such overridings. You can think of it as inserting a bridge method in B that implements the method in A by forwarding to the method in B and box-adapting argument and result. However, it seems that such a box adaptation could in general require some capability in B that was not required before. So this would need to be worked into the general capability propagation framework.
The test is in #16415 (as a neg-test, to be re-classified once this works).