2017-04-04 3 views
1

がシンボルを解決できません私は形質を以下している

sealed trait Sum[+A, +B] 

final case class Failure[A](value: A) extends Sum[A, Nothing] 

final case class Success[B](value: B) extends Sum[Nothing, B] 

object Sum { 

    def flatMap[AA >: A, B, C](s: Sum[AA, B], f: B => Sum[AA, C]): Sum[AA, C] = 
    s match { 
     case Failure(v) => Failure(v) 
     case Success(v) => f(v) 
    } 

    def fold[A, B, C](s: Sum[A, B], success: A => C, failure: B => C): C = 
    s match { 
     case Failure(v) => failure(v) 
     case Success(v) => success(v) 
    } 

    def map[A, B, C](s: Sum[A, B], success: A => C): Sum[A,C] = 
    fold(s, succ => Success(success(succ)), fail => Failure(fail)) 

} 

とコンパイラが文句を言う:

Cannot resolve symbol A 

によって:

flatMap[AA >: A, B, C] 

私が間違って何をしているのですか?

+0

それは行番号を与えるのでしょうか? – Harald

答えて

4

私は間違っていますか?

存在しない型パラメータの下限を定義しています。この文脈でAとは何ですか?あなたはコンパイラに "私はAAに型の下限を持たせたい"と言っていますが、宣言されていないのでコンパイラは汎用型のパラメータAを知らない。

使用すると、1つが他の上下限(またはより一般的には、バインドされた)である2種類のパラメータを、持っているしたい場合は、それが最初に宣言する必要があります

def flatMap[A, AA >: A, B, C] 
関連する問題