scala - 如何将 scalaz.EitherT.fromEither 应用于 scalaz.\/?

标签 scala monads scalaz monad-transformers

我正在尝试根据 question 调整我的代码.一切都很好,除了我的方法返回 scalaz.\/ 而不是 scala.util.Either。所以现在我必须写一个像这样的猴子代码:

def myFunction:Future[LeftBad \/ RightGood] = ...

val result = for {
    x <- fromEither(myFunction.map(_.toEither))
} yield {
  ...
}
result.run
//etc

有没有办法从 Future[\/] 构造 EitherT 而无需 toEither 调用?

最佳答案

您可以使用 EitherT.eitherT(...)或者只是 EitherT(...) :

import scalaz._, Scalaz._

val futDisjunction: Future[String \/ Int] = Future.successful(\/-(5))

scala> EitherT(futDisjunction)
// scalaz.EitherT[scala.concurrent.Future,String,Int]

关于scala - 如何将 scalaz.EitherT.fromEither 应用于 scalaz.\/?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32228626/

相关文章:

scala - 镜头和部分镜头有什么区别?

斯卡拉 : cannot check match for unreachibility even with default value

haskell - Monad 结果类型不会在 `Either String` 上生成 `fail`

haskell - 与 Functor 不同,Monad 可以改变形状?

scala - 类型别名与 lambda 类型

scala - 在scalaz中堆叠StateT

scala - 是否可以在 Scala 中打印函数的定义

scala - 提交到 Spark 集群时出现 FileNotFoundException

scala - 如何覆盖 awsglue 作业中的 couchbase 查询超时?

haskell - 单子(monad)-tf : MonadReader instance for MonadState