Como inferir o parâmetro de tipo correto de um tipo de projeção?

Eu tenho alguns problemas com Scala para inferir o tipo certo de uma projeção de tipo.

Considere o seguinte:

trait Foo {
  type X
}

trait Bar extends Foo {
  type X = String
}

def baz[F <: Foo](x: F#X): Unit = ???

Em seguida, o seguinte compila bem:

val x: Foo#X = ???    
baz(x)

Mas o seguinte não compilará:

val x: Bar#X = ???    
baz(x)

Scala vê o "tipo de string subjacente" parax, mas perdeu a informação quex é umBar#X. Ele funciona bem se eu anotar o tipo:

baz[Bar](x)

Existe uma maneira de fazer o Scala inferir o parâmetro de tipo correto parabaz?
Se não, qual é a resposta geral que torna impossível?

questionAnswers(2)

yourAnswerToTheQuestion