2017-12-29 3 views
0

내가 들어 올리려고 해요 기능 2 있습니다실용적 리프팅

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 기능을 가지고있다.

관련 문제