¿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?