问题标签 [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 投票
1 回答
82 浏览

kotlin - 您可以使用 Arrow FX 将此代码转换为 monad 理解吗?

你能把这个反应式方法转换成Arrow Fx Project Reactor monad comprehension吗?

我已经尝试过这样的事情,但它无效。

我发现的第一个问题是,最初我使用 flatMapMany 将 Mono 转换为 Flux。如果我使用FluxK.monad().fx.monad clientRepository.findById(clientId).k().bind()没有.bind()可用的功能。

如果我MonoK.monad().fx.monad改用我不知道如何将输出转换为通量:

更新

按照 El Paco 的回答,我将代码修改为:

clientRepository.findById(clientId)存在时工作正常。如果没有,它不会将 null 分配给 val 客户端,而是退出理解(否则不执行),因此我无法从理解内启动我的异常,我想这是正常的。

考虑以下方法,其中我需要控制客户端或项目不存在的两种情况:

考虑到 if/else 方法不起作用,我如何在使用推导时处理那些不存在的情况?

我可以在理解之外使用 switchIfEmpty 运算符,但我不知道原因(客户端不存在 vs 项目不存在)

0 投票
1 回答
135 浏览

kotlin - 箭头镜头不允许我将可空属性设置为空

鉴于此(极其简化)代码:

我可以打电话

但是由于参数类型是不可为空的String,我该如何修改tokennull?当然

不编译。

尝试将其设置为时将token类型更改为时也会发生同样的情况,但我避免使用它,因为它现在已被弃用(我不确定我是否喜欢,但这是另一回事)。Option<String>None

我错过了什么明显的东西吗?

0 投票
1 回答
246 浏览

kotlin - 用于组合来自不同来源的数据的 FP 模式(最好在 Kotlin 和 Arrow 中)

免责声明:最近,我对函数式编程的兴趣越来越大,我已经能够在我的工作中应用最基本的方法(在我的知识和工作环境允许的情况下使用纯函数)。然而,当涉及到更高级的技术时,我仍然非常缺乏经验,我认为通过在这个网站上提问来学习一些可能是正确的想法。我每隔一段时间就会偶然发现一次类似的问题,所以我认为 FP 中应该有模式来处理这类问题。

问题描述

归结为以下几点。假设某处有一个 API 提供所有可能宠物的列表。

这个 API 对“最喜欢的”字段一无所知,它也不应该知道。它不在我的控制之下。它基本上只是返回一个宠物列表。现在我想允许用户将宠物标记为他们的最爱。我将此标志存储在本地数据库中。

所以在从api中获取所有宠物之后,我必须根据持久化的数据设置最喜欢的标志。

出于某种原因,我认为处理“从一个数据源获取一部分信息,然后将其与另一个数据源的一些信息合并”问题的这段代码可能会受益于 FP 模式的应用,但我不太确定朝哪个方向看。

我已经阅读了Arrow的一些文档(顺便说一句很棒的项目 :)),并且是 Kotlin 的狂热爱好者,因此非常感谢使用这个库的答案。

0 投票
1 回答
574 浏览

kotlin - 如何有效地扁平化 Kotlin 中的 Either 列表

我有一个类似这样的列表List<Either<Failure, List<MyResult>>>,并希望将其展平为Either<Failure, List<MyResult>>使用 Arrow-kt,但我尝试过的所有内容似乎都很笨拙,最终遍历列表两次。感觉应该有更好的方法,但我无法弄清楚。这是我现在拥有的一个人为的例子:

欢迎任何建议!

things.map { }额外的问题:如果其中一个人回来了,有没有捷径可走Left

0 投票
1 回答
151 浏览

kotlin - Kotlin 等效于联合类型上的一些 F# 代码匹配

我正在学习 Kotlin,想知道是否有人可以就以下 F# 片段在惯用的 Kotlin 中的外观提出建议。

太感谢了。(顺便说一句,该片段来自 Scott Wlaschin 精彩的Domain Modeling Made Functional

0 投票
1 回答
158 浏览

kotlin - 生成序列时抛出的异常

我想将一个可能很大的文件从一个地方复制到另一个地方(例如但不限于本地文件系统)。为了将阅读与写作分离,我的复制流程包含执行每个任务的步骤:

  • 读取步骤返回一系列行(文件内容)。此步骤生成文件的每一行以避免将所有文件内容都放在内存中。
  • 写入步骤写入从上一步接收到的行序列。

好吧,有时读取文件时可能会发生异常,在这种情况下,我希望捕获该异常并返回空的行序列。我一直在阅读如何进行,但我只找到与协程相关的参考资料。并且sequence生成器不是协程的。

编辑:正如评论中所建议的,我避免使用 Either。尽管如此,在文件读取期间可能会引发 IOException。

最后,我以此结束:

当调用此函数并抛出异常时,我无法捕获它,因为它是在消耗序列时抛出的(通常在编写步骤中)。如何在asSequenceOfLines()调用函数(读取步骤)中捕获异常?

你在这里有完整的代码:https ://pastebin.com/PCarVGP8 。我正在使用 Kotlin 1.3.50 和 arrow-kt 0.10.0。

谢谢阅读 :)

0 投票
3 回答
1095 浏览

kotlin - Kotlin arrow-kt,将任一集合映射到任一集合的函数式方法

我最近一直在使用 kotlin arrow,但我遇到了一个让我陷入困境的特定用例。

假设我有一些对象的集合,我想使用转换函数将其转换为另一种数据类型。还可以说这个转换函数有失败的能力——但不是抛出异常,它只会返回一个 Either,其中Either.Left()是失败并且Either.Right()是映射的对象。处理此用例的最佳方法是什么?下面的一些示例代码:

本质上,我想在数据集合上调用映射函数,如果任何映射以失败响应,我希望Either.Left()包含错误。否则,我希望Either.Right()包含所有映射的对象。

有什么想法可以以干净的方式做到这一点吗?理想情况下,我想进行一系列函数调用,但能够通过函数调用将错误向上渗透。

0 投票
1 回答
38 浏览

kotlin - 当结果应该具有值或没有值时改进 applicativeNel 验证

我目前正在学习使用 ArrowKT,并且我有以下代码用于验证输入。我试图一次收集所有错误并并行执行验证,因为它们中的大多数都是针对数据库完成的。

有没有更好的方法来处理内部验证validateSlotIsFree?如果有效,我似乎被迫在右侧返回一些东西,但我不想这样做。我一直在寻找类似的东西,Option其中值将是错误,而为空则意味着验证已通过。这样做的问题是,它Validated.fromOption(...)会取值并将其应用于右侧,而我需要相反的情况。

0 投票
1 回答
444 浏览

kotlin - 谁能激发为什么 Arrow (Kotlin) 选择弃用更高种类的类型?

深入研究Arrow的代码库后,我发现这个弃用警告高于更高种类的类型。

在 Arrow 0.13.0 之后,将不再支持更高种类的类型及其相关的类型类。大多数相关 API 现在具体化为成员或顶级扩展函数可用的数据类型

任何人都可以激发这种选择和建议的替代方案吗?或者指向我关于这个主题的一些相关文档?

0 投票
2 回答
136 浏览

kotlin - 我可以在本机构建中使用 Kotlin Arrow-lib 和 Quarkus

我开始了一个新的 Kotlin 项目,我想将arrow-kt 核心库与 Quarkus (1.12.2) 结合使用。我想将 Quarkus 的本机编译功能与 GraalVM 一起使用。我的第一个想法是箭头是一个没有反射的简单库,但后来我读到。由于 GraalVm 在运行时在本机可执行文件中存在反射问题,这会是 Arrow 的问题吗?如果这是一个问题,我可以通过简单地避免 Arrow 的某些功能来绕过这个问题吗?

我知道我可以在 Quarkus/GraalVM 中标记反射类。反射检查哪些类?我可以简单地为几个类添加反射信息,还是我需要为整个库或我的整个代码添加反射信息?