Границы типа для непримененных параметров типа

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

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).

Я думаю, что могу написать ограничение с типом member следующим образом:

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 было как можно более чистым)?


person 0__    schedule 15.01.2012    source источник


Ответы (1)


Почему бы и нет

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

object X extends Declr[ X ]  
trait X[ S <: Sys[ S ]]
person Didier Dupont    schedule 15.01.2012
comment
Я сбит с толку. Я уверен, что пробовал это, и он не принял эту первую строку. Но, очевидно, теперь, когда я скомпилировал ваш код, он работает :-# Извините за шум... - person 0__; 16.01.2012