An alternative formulation is to use abstract type members:
trait Foo { self =>
type A <: Foo {type A = self.A}
}
With your example:
trait Foo { self =>
type T
type Actual <: Foo {type T = self.T; type Actual = self.Actual}
}
trait Concrete extends Foo { self =>
type T
type Actual = Concrete {type T = self.T}
}
While this reformulation isn't really nicer at the trait/class declarations, when using the traits/classes it can be much terser. (And as far as I know, there isn't another way to reformulate recursive types).