没有观察到更高的金属类型

时间:2017-09-01 18:34:34

标签: scala types typeclass higher-kinded-types

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

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

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

0 个答案:

没有答案