scala - 将\/[A, B] 提升到EitherT[Future, A, B]

标签 scala scalaz monad-transformers

如何提升\/[Error, Int]进入 EitherT[Future, Error, Int]使用 point/liftM语法使得提升在右侧?

我有以下场景

for {
  r1 <- f1: EitherT[Future, Error, Int]
  r2 <- v: \/[Error, Int]
  r3 <- f2: EitherT[Future, Error, Int]
} yield r3

我可以做 v贴合 EitherT.fromDisjunction[Future] 像这样
for {
  r1 <- f1
  r2 <- EitherT.fromDisjunction[Future](v)
  r3 <- f2
} yield r3

或者干脆
for {
  r1 <- f1
  r2 <- EitherT(Future(v))
  r3 <- f2
} yield r3

但是我试图将提升魔法移到 v 的右侧像这样
for {
  r1 <- f1
  r2 <- v.point[Future].liftM[EitherT] // something approximately like this
  r3 <- f2
} yield r3

我试过
type Result[F[_], A] = EitherT[F, Error, A]
v.point[Future].liftM[Result]


v.point[({ type L[x] = EitherT[Future, Error, x] })#L]

建议 herehere ,但是这类型到
EitherT[Future, Error, Error \/ Int]

虽然我需要
EitherT[Future, Error, Int]

将提升移到右侧只是为了美观,如 EitherT.fromDisjunction[Future]工作正常。

最佳答案

只是

r2 <- v.eitherT[Future, Error, Int]


import scalaz.{EitherT, \/}
import scalaz.std.scalaFuture._
import scalaz.syntax.eithert._
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
import scala.language.higherKinds

关于scala - 将\/[A, B] 提升到EitherT[Future, A, B],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741320/

相关文章:

scala - scala 中的 "dangling"本地 block

scala - 是否有可能避免 Scala 使用 Scalaz 将元组作为输入参数处理的凌乱方式?

scalaz:如何处理验证中的不同错误类型?

scala - | @ |的验证用法在 Scalaz

haskell - 是否有用于获取 monad 的转换器版本的库或类型类?

scala - 非方法的 Eta 扩展适用于字段但不适用于局部变量

java - 为什么Array(1,2,3).toString()每次执行的结果都不一样?结果是如何确定的?

haskell - 用 `ParsecT` 进行排列解析?

haskell - 使用 ReaderT Maybe 还是 MaybeT Reader?

r - 使用 rscala 在 R 中使用 Scala 时出现 NoSuchMethodError