如何使用咖喱功能

问题描述:

我有对象上的咖喱功能:如何使用咖喱功能

sealed trait Sum[A, B] 

final case class Left[A, B](value: A) extends Sum[A, B] 

final case class Right[A, B](value: B) extends Sum[A, B] 

object Sum { 

    def fold[A, B, C](s: Sum[A, B])(left: A => C)(right: B => C): C = 
    s match { 
     case Left(v) => left(v) 
     case Right(v) => right(v) 
    } 

} 

如何使用折叠功能?我尝试如下:

object Main { 
    def main(args: Array[String]): Unit = { 

    val l = Sum.fold(Left(5))(l => l * l) 

    } 
} 

但我不知道,如何通过第三个参数。

你一个不喜欢它:

val a: Sum[Int, Int] = Left(5) 
    val l = Sum.fold(a)(l => l * l)(l => l * l) 

OR

val l = Sum.fold(Left[Int, Int](5))(l => l * l)(l => l * l) 

必须同时指定SumAB类型编译器可以推断LeftRightAB类型。

由于您的代码段,你只需指定LeftA类型Int没有B类型,编译器不能推断B类型,因此关于你的第三高阶功能参数,在编译时,编译器会在这里失败。

你只需要给出一个明确的类型为B为right功能:

val l = Sum.fold(Left(5))(a => a * a)((b: Int) => b * b)