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
def one: Foo[_ >: T] is equivalent to
def one: Foo[_ >: T]
def one: Foo[U >: T] forSome {type U >: T}
this one instead works
def one: Foo[U forSome {type U >: T}]
I do not however understand why this would make a difference. It seems like it should not to me. (shrug)