我正在做一些看起来应该相当简单的事情:尝试实现为具有两个类型参数的集合定义的类型类,使用较高级的类型作为类型类的类型参数 .

这里值得注意的复杂性是集合类型上有一个类型绑定 .

我希望在类型类实现体中,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]) = ???