问题标签 [arrow-kt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
6327 浏览

kotlin - 为什么使用 Arrow 的 Options 而不是 Kotlin 可为空的

我正在查看此处找到的 Arrow 库。为什么要使用Option类型而不是 Kotlin 的内置可空值?

0 投票
2 回答
340 浏览

android - 如何使用 Arrow 创建自己的数据类型

使用箭头创建自己的数据类型的步骤是什么。

使用Option提供的扩展构造函数(如Some(data)or )很简单None。但是,如何创建自己的数据类型,它具有像map()or这样的函数运算符flatMap()

0 投票
2 回答
2152 浏览

kotlin - 将 Spring Webflux Mono 转换为 Either,最好不阻塞?

我正在使用 KotlinArrow以及来自. 我想做的是将Mono实例转换为Eitherspring-webflux

在响应成功或返回错误时Either调用创建实例。Either.right(..)WebClientEither.left(..)WebClient

我正在寻找的是一种Mono类似于Either.fold(..)的方法,我可以在其中映射成功和错误的结果并返回与 a 不同的类型Mono。像这样的东西(伪代码不起作用):

一个人应该怎么走?

0 投票
1 回答
329 浏览

monads - 为什么验证会违反单子定律?

SO上,解释了为什么像 scalaz、cats (Scala) 或 Arrow (Kotlin) 这样的验证不能是 monad。

据我了解,这是因为他们已经根据应用函子对 monad 进行了建模,并且 Validation 作为应用程序(收集所有无效)的所需行为与 Validation 作为 monad 的所需行为不同(序列验证并在首先无效)。因此,当您希望快速失败时,您需要将验证转换为 any(这是一个 monad)。

https://groups.google.com/forum/#!msg/scalaz/IWuHC0nlVws/syRUkXJklWIJ上,他们提到验证不是单子的原因,是因为以下属性不成立:

但是看看 monad 的定义,上面的属性不是monad 法则的一部分。那么,这是因为 monad 是根据应用程序实现的,还是上述属性是成为 monad 的先决条件?

这种更高层次的推理对我来说都是新事物,但在我对 FP 的有限理解中,我可以有一个验证数据类型,它在用作应用程序(累积无效)时具有一种行为,而在用作 monad 时具有另一种行为(快速失败)。

0 投票
1 回答
94 浏览

functional-programming - 使用箭头 kt 的列表理解时出现 ClassCastException

我正在尝试在 Kotlin 中使用带有守卫的列表理解。当我运行以下代码时,我得到一个ClassCastException似乎没有相关的地方。

这是堆栈跟踪:

第 20 行是开始的行val result

我怎样才能使这种理解起作用?

我在 Java 1.8.0_131 上使用 Kotlin 1.2.41 和 Arrow-Kt 0.7.2。

0 投票
2 回答
180 浏览

kotlin - 智能投射 Arrow-kt 选项

我正在尝试从任何 Any 变量智能转换选项,以便我可以确定选项是否为空,但是 IDE 指示 Option<*> 不能智能转换,因为它是在不同的模块中声明的。

0 投票
1 回答
1022 浏览

kotlin - 使用 Kotlin Arrow 库生成镜头

我正在阅读“Functional Kotlin”,它描述了使用注释生成镜头。

@镜头

Arrow 生成与我们的数据类具有的构造函数参数一样多的镜头,使用名称约定classProperty并在同一个包中,因此不需要额外的导入

但是当我尝试使用@lenses注释时,找不到它。

@光学

在箭头文档中,我注意到他们使用了@optics注释

这将创建一个Memory.Companion.size镜头。

由于我无法在@lenses注释上找到任何其他材料,这让我想知道这是否可能是一个已弃用的实现。

我的预感是正确的还是我在这里遗漏了什么?

0 投票
1 回答
1053 浏览

kotlin - Kotlin 编写函数列表

目前我正在使用一个名为arrow的库中的compose,它以这种方式定义。

我想要做的是从一个列表中组合函数,所以我假设这样简单的东西会起作用。

但我收到类型错误:

类型推断失败:无法在 inline infix fun ((IP) -> R).compose(crossinline f: (P1) -> IP): (P1) -> R 中推断类型参数 IP 没有以下替换接收器:(任何) -> 任何参数:((Nothing) -> Any) 接收者:(Nothing) -> 任何参数:((Nothing) -> Nothing) 可以应用于接收者:Function1<, Any> 参数:(Function1<, Any >)

所以我尝试:

我明白了:

类型不匹配:推断类型为 KFunction1<@ParameterName Option, Option> 但 (Any) -> Any 是预期的

类型不匹配:推断类型是 (Int) -> Option 但 (Any) -> Any 是预期的

类型不匹配:推断类型是 (Int) -> Int 但 (Any) -> Any 是预期的

任何帮助表示赞赏。我不介意我最终是否必须编写自己的 compose 版本。我只需要能够编写函数列表。

编辑:

这没有问题:

如果我有一个函数列表而不是这样写,我只是想达到相同的结果。

0 投票
1 回答
721 浏览

kotlin - kotlin 箭头函数式编程中的 Monad 是什么?

有人可以解释函数式编程Monad的概念吗?Arrow

https://arrow-kt.io/docs/datatypes/option/

0 投票
1 回答
592 浏览

kotlin - Kotlin + Arrow + Gson = 无?

我在 Kotlin 中有一个简单的图书和借阅者图书馆的模型,如果图书有借阅者,则在其中签出图书。我使用箭头选项来编码借款人的缺席/存在:

我在将这些对象序列化/反序列化到 Gson 中的 JSON 时遇到问题 - 特别是在一本书Option<Borrower>中对 JSON的表示:null

我的反序列化代码:

我得到一个空列表。几乎相同的jsonStringToBorrowers工作正常。

有人可以指出我正确的方向吗?

是否会使用不同的 JSON 库,kotlinx.serialization或者Klaxon是一个更好的主意,他们是如何做的null <-> None

谢谢!