Jak wywnioskować odpowiedni parametr typu z typu projekcji?
Mam pewne kłopoty ze Scalą, aby wywnioskować właściwy typ z projekcji typu.
Rozważ następujące:
trait Foo {
type X
}
trait Bar extends Foo {
type X = String
}
def baz[F <: Foo](x: F#X): Unit = ???
Następnie dobrze się kompiluje:
val x: Foo#X = ???
baz(x)
Ale poniższe nie skompilują się:
val x: Bar#X = ???
baz(x)
Scala widzi „podstawowy typ String”x
, ale utracił informacjex
jestBar#X
. Działa dobrze, jeśli zaznaczę typ:
baz[Bar](x)
Czy istnieje sposób na to, aby Scala wyprowadził odpowiedni parametr typu dlabaz
?
Jeśli nie, jaka jest ogólna odpowiedź, która uniemożliwia to?