首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin箭头-kt扁平嵌套

Kotlin箭头-kt扁平嵌套
EN

Stack Overflow用户
提问于 2018-02-12 18:24:00
回答 1查看 4.4K关注 0票数 6

我正在使用函数库arrow-kt (以前称为kategory)进行编程。我使用Either monad聚合api调用的错误或成功信息。我让自己陷入了一种状态(一开始就不应该发生这种情况),在这种状态下,我有一个嵌套的Either单簧管。我试着把结构夷为平地,以获得内心的单元化。文档非常有限,我无法找到一种方法来完成它。

下面是一个嵌套的monad示例,我想将其扁平化:

代码语言:javascript
复制
Either.right(Either.right(Either.left("error")))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-12 22:50:14

您可以使用flatten将这种结构夷为平地。

代码语言:javascript
复制
import arrow.core.*
import arrow.typeclasses.*

val result = Either.right(Either.right(Either.left("error")))
Either.monad<String>().flatten(result)
// keep flattening until you are happy with the result
// Right(b=Left(a=error))

或者仅仅是flatMap

代码语言:javascript
复制
import arrow.core.*
import arrow.typeclasses.*

val result = Either.right(Either.right(Either.left("error")))
result.flatMap { it.flatMap { it } }
// Left(a=error)

这样的嵌套结构可能意味着您在程序中的某个时候没有使用正确的数据类型或错误的抽象,因为这是一种无用的值。

如果您希望如注释中所示保留左值,我认为更合适的数据类型是Validated,它允许错误积累,如本文所示,http://arrow-kt.io/docs/datatypes/validated/

或者,Either#fold可以帮助您考虑这两种情况,然后合并成您想要的任何价值。

我假设您已经遇到了这样的情况,其中大部分内容都会得到解释,但是以防万一一些有用的链接将帮助您用Arrow来建模

此外,如果您需要与维护人员和其他贡献者进行更多的交互体验,那么可以随意使用我们的聊天渠道,在这里,我们经常帮助所有级别的人学习FP和Arrow。

干杯!

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48753068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档