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