在Scala中,为什么我不能使用类型构造函数的上下文绑定?

时间:2011-05-23 12:47:28

标签: scala manifest higher-kinded-types

  

可能重复:
  Context bounds shortcut with higher kinded-types

为什么Scala编译器不允许我写这个?

class TypeCtor[M[_]: ClassManifest]

它抱怨“错误:类型M采用类型参数”。如果我只要求ClassManifest,编译器应该能够插入它,无论M的参数化是什么,不是吗?

这可以按预期工作:

class TypeCtor[M[_]](implicit val ev: ClassManifest[M[_]])
(new TypeCtor[Vector]).ev.erasure // => class scala.collection.immutable.Vector

2 个答案:

答案 0 :(得分:3)

请参阅我对this question的回答。

答案 1 :(得分:0)

M的参数化是不相关的,但Scala编译器需要ClassManifest的参数才能知道要插入的哪个清单。我们说我们有

class TypeCtor[A,B](implicit val ev: ClassManifest)

现在编译器不知道是否要插入A或B的清单。你也不能写ClassManifest [M],因为ClassManifest需要类型*和M有类型* - > *