在scala + cats中应用提升function2,function3,...

Applicative lifting of a function2, function3, ... in scala+cats

我有一个要提升的 Function2:

def myFunction(a: String, b: String): String

我想得到带有签名的函数

def myFunction2(a: Option[String], b: Option[String]: Option[String]

应该 return None 以防任何参数为 None。在 Scalaz 中,这种情况有 Applicative.lift2,但我找不到 cats.

的情况

如何对 cats 执行相同的操作? lift3、...呢?

您要找的是Apply.ap2。这是使用 Apply.ap2.

实现的示例
 import cats.implicits._

 def myFunction(a: String, b: String): String =
   a + b

 def myFunction2(a: Option[String], b: Option[String]): Option[String] =
   Apply[Option].ap2(Some(myFunction _))(a, b)

 assert(myFunction("a", "b") === "ab")
 assert(myFunction2(Some("a"), Some("b")) === Some("ab"))
 assert(myFunction2(Some("a"), None) === None)

您还有 ap 个函数用于更多参数(在 ApplyArityFunctions 中定义),最多 ap22