trait A { type T def test(t: T): Unit } case class B[S <: A](a: S, t : S#T) { def test() = a.test(t) // Error: type mismatch; // found : B.this.t.typ
Instead of a type projection you can use the dependent type a.T:
a.T
trait A { type T def test(t: T): Unit } case class B[S <: A](a: S)(t : a.T) { def test() = a.test(t) }