对于模式匹配中具有较高kinded类型参数的案例类,Scala类型检查意外失败

时间:2014-04-23 21:57:00

标签: scala pattern-matching typechecking type-parameter higher-kinded-types

让我定义一些类型

trait H
trait Gen[h <: H]
trait Gen2[h <: H] extends Gen[h]

trait Ez[g[h <: H] <: Gen[h]] // needs to be invariant

case class CC[g[h <: H] <: Gen[h], E[g[h <: H] <: Gen[h]] <: Ez[g]](i: E[g])

解决方法https://issues.scala-lang.org/browse/SI-5900

的自定义提取器
object CCX {
  def unapply[g[h <: H] <: Gen[h], E[g[h <: H] <: Gen[h]] <: Ez[g]](i: CC[g, E]): Option[E[g]] = ???
}

及其用例

// not compiles
(null: AnyRef) match {
  case CCX(i: Ez[Gen2]) =>
}

在编译时使用Scala 2.10.4,我收到以下错误

pattern type is incompatible with expected type;
     found   : Ez[Gen2]
     required: Ez[g] where type g[h <: H] <: Gen[h]
          case CCX(i: Ez[Gen2]) =>
                      ^

Ez[Gen2]似乎符合<{p}}中的Ez[g]

// these compiles
val i: Ez[Gen2] = ???
val cc = CC(i)
val u: Option[Ez[Gen2]] = CCX.unapply(cc)

我想知道这是不是一个错误。另外,您能解释一下这些资源的原因或链接吗?

0 个答案:

没有答案