键入未应用的类型参数的边界

时间:2012-01-15 20:11:24

标签: scala higher-kinded-types type-bounds

如何指定未应用的高阶类型参数的边界,以便进行以下编译:

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>

1 个答案:

答案 0 :(得分:4)

为什么不

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

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