如何将 Future[Option[Int]] 分配给 OptionT[Future, Int]
How to assign a Future[Option[Int]] to a OptionT[Future, Int]
我创建了这个简单的 Monad Transformer
type FutureOptionInt = OptionT[Future, Int]
现在我可以通过
轻松创建一个实例
1.pure[FutureOptionInt]
这很好。但我还有另一个功能,它 return 给我一个 Future[Option[Int]]。我无法将此函数的输出更改为 MT
所以我需要为我的 MT 分配 return 类型。
我试过了
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]?
您可以使用隐式转换来执行此操作:
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
我创建了这个简单的 Monad Transformer
type FutureOptionInt = OptionT[Future, Int]
现在我可以通过
轻松创建一个实例1.pure[FutureOptionInt]
这很好。但我还有另一个功能,它 return 给我一个 Future[Option[Int]]。我无法将此函数的输出更改为 MT
所以我需要为我的 MT 分配 return 类型。
我试过了
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]?
您可以使用隐式转换来执行此操作:
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