The following typechecks:
trait TS { type T = Int }
trait T { self: TS =>
type T
def lift(x: Int): T = x
}
But this variant doesn't:
trait T { self: { type T = Int } =>
type T
def lift(x: Int): T = x // error: expected T, found: Int
}
The two should behave the same.