2017-04-04 111 views
1

我有以下特點:無法解析符號A

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類型的下限」,但編譯器不知道泛型類型參數A,因爲它沒有聲明。

如果你想有兩種類型的參數,其中一個是另一個的下限(或更一般的任何約束),它需要首先聲明:

def flatMap[A, AA >: A, B, C]