6
このコードはScalaの2.9.2でコンパイル:奇妙なエラー(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)
}
しかし、スカラ座2.10.0とそれがコンパイルされません。次のようなエラーが表示されます(言語の高い機能が有効になっています)。
[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)を持つと推測されているようです。 –