如何将未来[Option [Int]]分配给OptionT [Future,Int]

时间:2017-03-27 16:14:53

标签: scala scala-cats

我创建了这个简单的Monad Transformer

type FutureOptionInt = OptionT[Future, Int]

现在我可以通过

轻松创建此实例
1.pure[FutureOptionInt]

这很好。但我有另一个功能,它返回一个Future [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

所以问题是,如果你有一个Future [Option [Int]],你如何将它分配给OptionT [Future,Int]?

1 个答案:

答案 0 :(得分: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
相关问题