Как вывести правильный тип параметра из типа проекции?
У меня есть некоторые проблемы с тем, что 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
?
Если нет, то какой общий ответ делает это невозможным?