2013-03-07 6 views
6

Ten kod kompiluje z Scala 2.9.2:Dziwny błąd z wyższym kinded typów w Scali 2.10.0 (współpracuje z 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) 
} 

Ale Scala 2.10.0 to nie kompiluje z następującym błędem (włączona jest wyższa wersja językowa):

[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) 

Co się tutaj dzieje? Jakie zmiany w typach wyższych typów pojawiły się w Scali 2.10?

P.S. Gdybym przekazać parametry typu jawnie, to kod kompiluje:

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) 
} 
+0

Wygląda jak błąd w wnioskowaniu typu. Wygląda na to, że A w unzip1 jest wywnioskowane, że ma typ (A, B), który jest naprawdę dziwny. –

Odpowiedz

Powiązane problemy