タイププロジェクションから正しいタイプを推測するためにScalaを使用するのに問題があります。
次のことを考慮してください。
trait Foo {
type X
}
trait Bar extends Foo {
type X = String
}
def baz[F <: Foo](x: F#X): Unit = ???
次に、以下が正常にコンパイルされます。
val x: Foo#X = ???
baz(x)
ただし、以下はコンパイルされません。
val x: Bar#X = ???
baz(x)
Scalaはの「基になる型String」を認識しますがx、である情報を失いましxたBar#X。タイプに注釈を付けると正常に機能します。
baz[Bar](x)
Scalaに正しい型パラメーターを推測させる方法はありますbazか?
そうでない場合、それを不可能にする一般的な答えは何ですか?