Scala преобразование рекурсивно ограниченного параметра типа (F-ограничено) для ввода элемента

Как мне преобразовать:

trait Foo[A <: Foo[A]]

члену типа?

I.e., мне нужно что-то в следующих строках:

trait Foo {
  type A <: Foo {type A = ???}
}

но у меня возникают трудности, потому что имя A уже принято в пределах уточнения типа. Этот вопрос аналогичен (и порожден из): F-ограниченная количественная оценка через член типа вместо параметра типа?

Ответ 1

Используйте self-type:

scala> trait Foo { self => type A <: Foo {type A = self.A}}
defined trait Foo

scala> class Bar extends Foo { type A = Bar }
defined class Bar

scala> class Bar extends Foo { type A = Int }
<console>:10: error: overriding type A in trait Foo with bounds <: Foo{type A = Bar.this.A};
 type A has incompatible type
       class Bar extends Foo { type A = Int }
                                    ^