【问题标题】:Strange error with higher-kinded types in scala 2.10.0 (works with scala 2.9.2)scala 2.10.0 中高级类型的奇怪错误(适用于 scala 2.9.2)
【发布时间】:2013-03-07 07:47:22
【问题描述】:

此代码使用 Scala 2.9.2 编译:

trait HK {
  type Rep[A]
  def unzip1[A, B, C[_]](ps: Rep[C[(A, B)]]): (Rep[C[A]], Rep[C[B]])
  def doUnzip1[A, B](ps: Rep[List[(A, B)]]) = unzip1(ps)
}

但在 Scala 2.10.0 中编译时出现以下错误(启用了higherKinded 语言功能):

[info] Compiling 1 Scala source to /home/klyuchnikov/code/hk/target/scala-2.10/classes...
[error] /home/klyuchnikov/code/hk/src/main/scala/HK.scala:6: type mismatch;
[error]  found   : HK.this.Rep[List[(A, B(in method doUnzip1))]]
[error]  required: HK.this.Rep[List[((A, B(in method doUnzip1)), B(in method unzip1))]]
[error]   def doUnzip1[A, B](ps: Rep[List[(A, B)]]) = unzip1(ps)

这里发生了什么? Scala 2.10 中高级类型的变化是什么?

P.S.如果我显式传递类型参数,那么这段代码可以编译:

trait HK {
  type Rep[A]
  def unzip1[A, B, C[_]](ps: Rep[C[(A, B)]]): (Rep[C[A]], Rep[C[B]])
  def doUnzip1[A, B](ps: Rep[List[(A, B)]]) = unzip1[A, B, List](ps)
}

【问题讨论】:

  • 看起来像是类型推断中的错误。似乎 unzip1 中的 A 被推断为具有类型 (A, B) ,这真的很奇怪。

标签: scala scala-2.10


【解决方案1】:

看起来像一个错误,很可能是: https://issues.scala-lang.org/browse/SI-5330

它应该在 Scala 2.10.1 中得到修复,如果你等不及可以尝试发布候选版本: http://www.scala-lang.org/2.10.1-RC3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多