class T[A[Y] <: T[A, B], B] class T2[X] extends T[T2, X] // ill-typed // because this bound is not met: // Forall Y. T2[Y] <: T[T2, X] // debugging before fix: // def isSubType0 --> // case (PolyType(tparams1, res1), PolyType(tparams2, res2)) => println("<: p2.info.substSym(tparams2, tparams1) <:< p1.info) && // res1 <:< res2.substSym(tparams2, tparams1)) // generates output: // <: println("<: p2.info.substSym(tparams2, tpsFresh) <:< p1.info.substSym(tparams1, tpsFresh)) && // res1.substSym(tparams1, tpsFresh) <:< res2.substSym(tparams2, tpsFresh) // })