-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Closed
Description
Compiler version
3.0.1-RC1
Minimized code
trait X {
type Y
}
trait E[A]
trait Test {
val x: X
def wrap(x: X): E[x.Y] = ???
def run[I](i: E[I]): Unit = ???
run(wrap(x))
}
Output
[error] -- [E007] Type Mismatch Error: /Users/adamw/projects/tapir/client/tests/src/main/scala/sttp/tapir/client/tests/ClientStreamingTests.scala:35:10
[error] 35 | run(wrap(x))
[error] | ^^^^^^^
[error] | Found: sttp.tapir.client.tests.E[Test.this.x.Y]
[error] | Required: sttp.tapir.client.tests.E[?1.Y]
[error] |
[error] | where: ?1 is an unknown value of type sttp.tapir.client.tests.X
[error] Explanation
[error] ===========
[error]
[error] I tried to show that
[error] sttp.tapir.client.tests.E[Test.this.x.Y]
[error] conforms to
[error] sttp.tapir.client.tests.E[?1.Y]
[error] but the comparison trace ended with `false`:
[error]
[error] ==> sttp.tapir.client.tests.E[Test.this.x.Y] <: sttp.tapir.client.tests.E[?1.Y]
[error] ==> sttp.tapir.client.tests.E[Test.this.x.Y] <: sttp.tapir.client.tests.E[?1.Y] (recurring)
[error] ==> ?1.Y <: Test.this.x.Y
[error] ==> ?1.Y <: Test.this.x.Y (recurring)
[error] ==> ?1.Y <: Test.this.x.Y (recurring)
[error] ==> (?1 : sttp.tapir.client.tests.X) <: (Test.this.x : sttp.tapir.client.tests.X)
[error] ==> (?1 : sttp.tapir.client.tests.X) <: (Test.this.x : sttp.tapir.client.tests.X) (recurring)
[error] ==> sttp.tapir.client.tests.X <: (Test.this.x : sttp.tapir.client.tests.X) (left is approximated)
[error] ==> sttp.tapir.client.tests.X <: (Test.this.x : sttp.tapir.client.tests.X) (recurring)
[error] <== sttp.tapir.client.tests.X <: (Test.this.x : sttp.tapir.client.tests.X) (recurring) = false
[error] <== sttp.tapir.client.tests.X <: (Test.this.x : sttp.tapir.client.tests.X) (left is approximated) = false
[error] <== (?1 : sttp.tapir.client.tests.X) <: (Test.this.x : sttp.tapir.client.tests.X) (recurring) = false
[error] <== (?1 : sttp.tapir.client.tests.X) <: (Test.this.x : sttp.tapir.client.tests.X) = false
[error] ==> Any <: Test.this.x.Y (left is approximated)
[error] ==> Any <: Test.this.x.Y (recurring)
[error] <== Any <: Test.this.x.Y (recurring) = false
[error] <== Any <: Test.this.x.Y (left is approximated) = false
[error] <== ?1.Y <: Test.this.x.Y (recurring) = false
[error] <== ?1.Y <: Test.this.x.Y (recurring) = false
[error] <== ?1.Y <: Test.this.x.Y = false
[error] <== sttp.tapir.client.tests.E[Test.this.x.Y] <: sttp.tapir.client.tests.E[?1.Y] (recurring) = false
[error] <== sttp.tapir.client.tests.E[Test.this.x.Y] <: sttp.tapir.client.tests.E[?1.Y] = false
[error]
[error] The tests were made under a constraint with:
[error] uninstantiated variables:
[error] constrained types: [I](i: sttp.tapir.client.tests.E[I]): Unit
[error] bounds:
[error] I := ?1.Y
[error] ordering:
[error] one error found
Expectation
Compile without errors :)
The above compiles fine using 2.13.
With Scala 3, the type parameter needs to be provided explicitly:
run[x.Y](wrap(x))