Как я могу указать границы непримененного параметра типа более высокого порядка, чтобы компилировалось следующее:
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
было как можно более чистым)?