6

このコードは 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 での高カインド型の変更点は何ですか?

PS型パラメーターを明示的に渡すと、このコードはコンパイルされます。

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)
}
4

1 に答える 1

0

おそらくバグのようです: https://issues.scala-lang.org/browse/SI-5330

Scala 2.10.1 で修正されるはずです。待てない場合は、リリース候補を試すことができます: http://www.scala-lang.org/2.10.1-RC3

于 2013-03-07T14:51:41.540 に答える