Как вывести правильный тип параметра из типа проекции?

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

Ответы на вопрос(2)

Ваш ответ на вопрос