type-projection

How to infer the right type parameter from a projection type?

喜你入骨 提交于 2019-12-03 06:55:30
I have some troubles having Scala to infer the right type from a type projection. Consider the following: trait Foo { type X } trait Bar extends Foo { type X = String } def baz[F <: Foo](x: F#X): Unit = ??? Then the following compiles fine: val x: Foo#X = ??? baz(x) But the following won't compile: val x: Bar#X = ??? baz(x) Scala sees the "underlying type String" for x , but has lost the information that x is a Bar#X . It works fine if I annotate the type: baz[Bar](x) Is there a way to make Scala infer the right type parameter for baz ? If not, what is the general answer that makes it