Scala 如何从一个文件夹中删除折叠以便理解?
我在Scala中使用Scalaz和Task/EitherT获得了以下代码片段: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[任务,失败,成功]。当这些方法与外部服务交互时,需要这些返回类型 有没有办法把最后一行的理解简化成更好的?我是说这个:
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)
这是未经测试的,但类似的东西应该或多或少能起作用。是的,这是有效的,我一直在尝试将一个理解的概念融入其中,但没有必要。万分感谢:)