我正在做一些看起来应该相当简单的事情:尝试实现为具有两个类型参数的集合定义的类型类,使用较高级的类型作为类型类的类型参数。
这里值得注意的复杂性是集合类型上有一个类型绑定。
我希望在类型类实现体中,scala编译器应该能够根据提供的类型类型参数推断出方法的返回类型......也许这在代码中会更清楚:
import language.higherKinds
class BaseDemo[T,Z]{
def get(t:T):Z
}
trait BaseDempHKTC[BDType[_,_]<:BaseDemo[_,_]]{
def doIt(arg:Int, bd:BDType[Int, BDType[Int, Double]) = {
val out = bd.get(arg) //"type mismatch: expected T, actual Int"
val outA:BDType[Int, Double] = out //nope. It thinks it's just a Z
}
}
我应该在这里使用不同的模式吗?在我的应用程序中,Int和Double类型也参数化如下,因此不仅仅使用特征定义中的具体类型,但以上是重现错误的最小值。
def doIt[TT,ZZ](arg:TT, bd:BDType[TT, BDType[TT, ZZ]) = ???