2017-05-30 8 views
-1

なぜ折り畳みがコンパイルされないのかわかりません。誰かが私に手がかりを与えることができますか?Scala:一般的な折り畳みの実装

sealed trait ListG[A] { 

    def fold[A,B](end: B, f: (A,B) => B): B = this match { 
    case End() => end 
    case Cons(hd,tl) => f(hd, tl.fold(end,f)) 
    } 
} 

エラー:(20,28)タイプの不一致。 が見つかりました:hd.type(基底型A) が必要です: ケース(hd、tl)=> f(hd、tl.fold(end、f)) ^ 最終ケースクラスEndA extends ListG [A ] 最後のケースクラス短所[A](HD:A、TL:ListGは、[A])を拡張ListG [A]

+2

コードとともにエラーメッセージを投稿する –

答えて

0

タイプアサーションを追加すると問題が解決するようです。

case Cons(hd:A, tl) => ... 
      ^^ 

タイプの消去についての警告はありますが、コンパイルされて実行されているようです。

4

あなたはfoldに追加の型パラメータAを定義するときは、typeパラメータAListGのをシャドウイングしています関数。

関連する問題