2012-01-15 2 views
2

Как я могу указать границы непримененного параметра высшего типа заказа, например, что в следующих компиляциях:Тип границы для непримененного типа параметры

trait Declr[Impl[_]] // need to specify constraints for Impl's type parameter 

trait Sys[S <: Sys[S]] 

object X extends Declr[X] // doesn't compile, because S is more strict 
trait X[S <: Sys[S]] 

без добавления дополнительных параметров типа в Declr. Заметим, что решение разрешено считать, что граница параметра Impl равна всегдаS <: Sys[S] (т. Е. Это привязка для любого типа, который может перейти в Declr).

Я думаю, что я могу написать ограничение с типом член как это:

trait Declr { 
    type Impl[S <: Sys[S]] 
} 

object X extends Declr { 
    type Impl[S <: Sys[S]] = X[S] 
} 
trait X[S <: Sys[S]] 

Но как это сделать, как тип параметр (как Пересчет type Impl очень шумно, и я хотите иметь object X как можно чище)?

ответ

4

Почему не

trait Declr[Impl[S <: Sys[S]]] 
trait Sys[ S <: Sys[ S ]] 

object X extends Declr[ X ] 
trait X[ S <: Sys[ S ]] 
+0

Я сбит с толку. Я уверен, что пробовал это, и он не принял эту первую строку. Но, очевидно, теперь, когда я компилирую ваш код, он работает: - # Извините за шум ... –

Смежные вопросы