Wie kann man aus einem Projektionstyp den richtigen Typparameter ableiten?
Ich habe einige Probleme damit, dass Scala aus einer Typprojektion den richtigen Typ ableitet.
Folgendes berücksichtigen:
trait Foo {
type X
}
trait Bar extends Foo {
type X = String
}
def baz[F <: Foo](x: F#X): Unit = ???
Dann kompiliert das folgende gut:
val x: Foo#X = ???
baz(x)
Folgendes wird jedoch nicht kompiliert:
val x: Bar#X = ???
baz(x)
Scala sieht den "zugrunde liegenden Typ String" fürx
, hat aber die Information verloren, dassx
ist einBar#X
. Es funktioniert gut, wenn ich den Typ annotiere:
baz[Bar](x)
Gibt es eine Möglichkeit, Scala den richtigen Typparameter für abzuleiten?baz
?
Wenn nicht, wie lautet die allgemeine Antwort, die dies unmöglich macht?