无法解析符号A.

时间:2017-04-04 06:37:09

标签: scala

我有以下特质:

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]

我做错了什么?

1 个答案:

答案 0 :(得分:4)

  

我做错了什么?

您正在为不存在的类型参数定义下限。在这种情况下,A是什么?您告诉编译器"我希望AA具有类型A"的下限,但编译器不知道泛型类型参数A因为它没有被宣布。

如果你想拥有两个类型参数,其中一个是另一个的下界(或者更常见的是任何边界),则需要先声明它:

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