如何指定未应用的高阶类型参数的边界,以便进行以下编译:
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]
(即,这是任何可以进入{{1}的类型的边界}})。
我想我可以用类型成员编写约束:
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
尽可能干净)?< / p>
答案 0 :(得分:4)
为什么不
trait Declr[Impl[S <: Sys[S]]]
trait Sys[ S <: Sys[ S ]]
object X extends Declr[ X ]
trait X[ S <: Sys[ S ]]