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?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage