Can an existentially quantified type variable be forced to have only a single type?
问题 Consider the following code trait Foo[T] { def one: Foo[_ >: T] def two: T def three(x: T) } def test[T](f: Foo[T]) = { val b = f.one b.three(b.two) } The method test fails to type check. It says: found : (some other)_$1(in value b) required: _$1(in value b) val x = b.three(b.two) If I am interpreting this correctly, the compiler thinks that b in method test has a type that looks like this (not legal syntax, but hopefully clearer): trait Foo { def two: X where ∃ X >: T def three(x: X where ∃