タイププロジェクションから正しいタイプを推測するために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
か?
そうでない場合、それを不可能にする一般的な答えは何ですか?