가능한 한 가벼운 선물을 사용하려고합니다.스태킹은 변환을 암시합니다.
여기에 내 현재의 테스트 코드입니다 :
import scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.Future
import scala.util.Failure
import scala.util.Success
object Test1 extends App {
def lift[A](a: A): Future[A] = Future { a }
def ap[A, B](fct: Future[A => B], param: Future[A]): Future[B] =
for {
c <- param
o <- fct
} yield (o(c))
implicit def valToFuture[A](elem: A): Future[A] = lift(elem)
implicit class FutureInfix[A, B](val x: Future[A => B]) extends AnyVal {
def <*>(that: Future[A]) = ap(this.x, that)
}
val plus1: Int => Int = (x: Int) => x + 1
val cst1: Int = 1
val extracted: Future[Int] = ap(plus1, cst1)
val extracted2: Future[Int] = lift(plus1) <*> lift(cst1)
val extracted3: Future[Int] = plus1 <*> cst
/*
* - value <*> is not a member of Int ⇒ Int
* - not found: value cst
*/
}
추출 extracted2가 작동하지만 각 단지 내가 정의한 두 암시 적 변환 중 하나를 사용하고 있습니다.
추출한 3은 암시 적으로 더하기 및 cst1을 Future [X] 값으로 변환하고 a <*> b
을 ap(a,b)
으로 변환하는 것을 목표로합니다. 하지만 컴파일러는 나와 동의하지 않는 것 같습니다.
나는 가능한 것을 달성하려고 노력하고 있습니까? 그렇다면 작동하도록 변경하려면 무엇을해야합니까?
추신 : 이것은 내가 haskell을 사용하여 보았던 것에 영감을주었습니다.
'cst'는 정의되어 있지 않습니까? – tkachuko
아니요, 두 개의 암시 적 변환을 동시에 연결할 수 없습니다. – flavian