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

Как бы я преобразовал:

trait Foo[A <: Foo[A]]

члену типа?

То есть я хочу что-то вроде следующего:

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

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


person Alex DiCarlo    schedule 09.01.2013    source источник


Ответы (1)


Используйте собственный тип:

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 }
                                    ^
person kiritsuku    schedule 09.01.2013
comment
Это была моя первоначальная интуиция, отличный ответ! - person Alex DiCarlo; 10.01.2013