¿Cómo inferir el parámetro de tipo correcto de un tipo de proyección?

Tengo algunos problemas para que Scala deduzca el tipo correcto de una proyección de tipo.

Considera lo siguiente:

trait Foo {
  type X
}

trait Bar extends Foo {
  type X = String
}

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

Entonces lo siguiente se compila bien:

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

Pero lo siguiente no compilará:

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

Scala ve el "tipo de cadena subyacente" parax, pero ha perdido la información quex es unBar#X. Funciona bien si anoto el tipo:

baz[Bar](x)

¿Hay alguna manera de hacer que Scala deduzca el parámetro de tipo correcto parabaz?
Si no, ¿cuál es la respuesta general que lo hace imposible?

Respuestas a la pregunta(2)

Su respuesta a la pregunta