2017-12-29 22 views
0

に、私は私が持ち上げるしようとしている機能2を持っている:Applicativeのリフティング、関数3、...のScala +猫

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

私は署名

でその機能を取得したいのですが
def myFunction2(a: Option[String], b: Option[String]: Option[String] 

引数のいずれかがNoneの場合、Noneを返すはずです。 Scalazでは、その場合はApplicative.lift2でしたが、catsの場合は同じものが見つかりません。

catsでこれを行うにはどうすればよいですか? lift3はどうですか?

答えて

2

あなたが探しているものは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) 

またap22まで、複数の引数(ApplyArityFunctionsで定義されている)のためのap機能を持っています。