1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
object Test extends App { trait A trait B extends A trait C { trait D { type T >: B <: A } val y: (D with this.type)#T = new B { } } class D extends C { trait E type T = E def frob(arg : E) : E = arg frob(y) } new D }