2017-03-27 4 views
1

나는 지금은 쉽게는 미래 할당하는 방법 [옵션 [지능은]]는 OptionT [미래, 지능]에

1.pure[FutureOptionInt] 
를 통해 이것의 인스턴스를 만들 수 있습니다 간단한 모나드 변압기를
type FutureOptionInt = OptionT[Future, Int] 

을 생성

좋습니다. 하지만 나에게 미래 [Option [Int]]를 돌려주는 다른 함수가있다. 이 함수의 출력을 MT

으로 변경할 수 없으므로 반환 유형을 MT에 지정해야합니다.

내가

val y = Future(Option(1)) 
val x : FutureOptionInt = y 

을 시도했지만 내가 얻을 오류

cmd5.sc:1: type mismatch; 
found : scala.concurrent.Future[Some[Int]] 
required: $sess.cmd3.FutureOption 
    (which expands to) cats.data.OptionT[scala.concurrent.Future,Int] 
val x : FutureOption = y 

그래서 질문 당신은 미래가있는 경우 [옵션 [지능이] 어떻게 OptionT [미래에 할당 않는다는 것입니다, Int]?

답변

1

는이 작업을 수행하는 암시 적 변환을 사용할 수 있습니다

implicit def toTransformer(future: Future[Option[Int]]) = OptionT(future) 

그런 다음 할당이 작품을했다.

그래서 당신은 컨버터의 부하를 작성하지 않아도 다음과 같이 또한 옵션 내부에 무엇을 통해 추상적으로 당신을 위해 유용 할 수 있습니다 :

implicit def toTransformer[T](future: Future[Option[T]]) = OptionT(future) 

type FutureOpt[T] = OptionT[Future, T] 

val intOpt = Future(Option(1)) 
val strOpt = Future(Option("")) 

val x : FutureOpt[Int] = intOpt 
val y : FutureOpt[String] = strOpt