2017-04-04 4 views
1

Ich habe folgende Eigenschaft:Kann nicht Symbol lösen 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)) 

} 

und der Compiler beschweren:

Cannot resolve symbol A 

von:

flatMap[AA >: A, B, C] 

Was mache ich falsch?

+0

hat es eine Zeilennummer geben:

Wenn Sie zwei Typ-Parameter haben, wo man ein unter auf einem anderen gebunden ist (oder allgemeiner jede gebunden), muss es zuerst erklärt werden? – Harald

Antwort

4

Was mache ich falsch?

Sie definieren eine untere Grenze für einen Typparameter, der nicht existiert. Was ist A in diesem Zusammenhang? Sie sagen dem Compiler "Ich möchte, dass AA eine untere Grenze vom Typ A hat", aber der Compiler kennt keinen generischen Typparameter A, weil er nicht deklariert wurde.

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