Scala 如何从一个文件夹中删除折叠以便理解?

Scala 如何从一个文件夹中删除折叠以便理解?,scala,functional-programming,scalaz,Scala,Functional Programming,Scalaz,我在Scala中使用Scalaz和Task/EitherT获得了以下代码片段: def myMethod(请求:MyRequest):EitherT[任务,失败,成功]= EitherT[任务、失败、成功]( 为了{ aamOpt进程(aam)).run) }产量结果) 其中async.findUser返回一个Task[选项[MyUser]]和进程(aam)返回EitherT[任务,失败,成功]。当这些方法与外部服务交互时,需要这些返回类型 有没有办法把最后一行的理解简化成更好的?我是说这个:

我在Scala中使用Scalaz和Task/EitherT获得了以下代码片段:

def myMethod(请求:MyRequest):EitherT[任务,失败,成功]=
EitherT[任务、失败、成功](
为了{
aamOpt进程(aam)).run)
}产量结果)
其中
async.findUser
返回一个
Task[选项[MyUser]]
进程(aam)
返回
EitherT[任务,失败,成功]
。当这些方法与外部服务交互时,需要这些返回类型

有没有办法把最后一行的理解简化成更好的?我是说这个:

result Task.now(-\/(err)),aam=>process(aam)).run)

我可能会立即将结果从
async.findUser
提升到相关的
EitherT
monad,然后只需
flatMap

def myMethod(request: MyRequest): EitherT[Task, Failure, Success] =
  EitherT.eitherT[Task, Failure, MyUser](
    async.findUser(request).map(_.\/>(NoUserFound()))
  ).flatMap(process)

这是未经测试的,但类似的东西应该或多或少能起作用。

是的,这是有效的,我一直在尝试将一个理解的概念融入其中,但没有必要。万分感谢:)