在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
。
我有一个要提升的 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
。