我刚刚开始评估ZIO,以改善编程模型和异步Scala代码的性能。在我的代码库中,我经常处理Future[Option[T]]
,至此,我已经使用Scalaz的OptionT
monad转换器进行了处理。现在,我想与ZIO一起尝试。
考虑两个功能:
def foo: String => Future[Option[T]]
和def bar: T => Future[U]
我尝试过这样的事情:
val t = for {
o: Option[Int] <- ZIO.fromFuture { implicit ec =>
foo("test")
}
i: Int <- ZIO.fromOption(o)
s: String <- ZIO.fromFuture { implicit ec =>
bar(i)
}
} yield s
根据我的IDE,在这种情况下,t
的类型为ZIO[Any, Any, String]
。我不知道该怎么办。
我想考虑三种可能性:
foo
生成可以与值上的其他函数组成的Some
foo
产生None
的情况>我不确定在这种情况下如何使用ZIO解析那些可能性。任何帮助表示赞赏。
我刚刚开始评估ZIO,以改善编程模型和异步Scala代码的性能。在我的代码库中,我经常处理Future [Option [T]],到目前为止,我已经处理过...
ZIO.fromOption
的类型是IO[Unit, A]
,即ZIO[Any, Unit, A]
,而ZIO.fromFuture
的类型是Task[A]
,即ZIO[Any, Throwable, A]
。因此类型不对齐