2017-04-04 108 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]