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

kotlin - 从地图中切割具有空值的对

我想过滤掉所有具有空值的对

预期的:

0 投票
1 回答
316 浏览

kotlin - 使用协程在 kotlin 中的列表上实现 monad 理解

我想知道是否可以在具有单子属性的列表或类似列表的结构上实现类似于 Kotlin 中 Haskell 的 do-notation 的东西。

举个例子:

如果我能写出类似的东西就好了

Arrow-Kt 使用协程为nullable、option 和 eval定义了类似的理解。我查看了实现及其效果文档,但我无法将概念转换为列表。这在 kotlin 中是否可行?

0 投票
2 回答
859 浏览

spring - Kotlin 的箭和交易

我正在尝试使用 Kotlin 的 Arrow 库Either对象来处理项目中的异常。

到目前为止,我的经验还不错,但我正在努力寻找一种方法来处理事务Either——尤其是回滚。在 Spring 中,抛出 aRuntimeException是导致事务回滚的可靠方法。但是,通过使用Either不会引发异常,因此不会触发回滚。

您可以将其视为一个多方面的问题:

  1. Either适合真正的Exception处理吗?不是替代控制流,我的意思是程序流需要停止的真正错误情况。
  2. 如果是这样,您如何使用它们实现回滚?
  3. 如果问题 2. 的答案是以transactionManager编程方式使用 - 你能避免这种情况吗?
  4. 我把这个挤进去,你怎么避免嵌套Eithers?
0 投票
2 回答
400 浏览

kotlin - 使用 Arrow-kt 和 Kotlin 处理异步结果

我对返回 Either<Exception, Something> 的外部系统有两个异步函数调用,需要合并它们的结果。作为 Arrow-Kt 函数式编程的初学者,我想知道哪种方法是完成这项任务的最佳方式。下面是我目前正在使用的代码。它确实有效,但并不真正“感觉”最直接。我正在寻找一种更“实用”的风格来获得结果。注意:成功列表结果的前期使用是必要的。

另一种选择是只使用这样的map{}功能

0 投票
1 回答
310 浏览

kotlin - 在进行数据库读/写交互时,如何保持功能清洁架构中的用例和实体层纯净?

介绍

在过去的几个月里,我一直在潜心研究函数式编程,因为我对 Kotlin 语言非常感兴趣,所以我一直在使用 Arrow 库来玩弄一些东西。

几周前,我一直在研究关于清洁架构的大学客座讲座,在此过程中,我偶然发现了 Mark Seemann 的这篇很棒的博客文章,描述了使用函数式编程如何自动导致清洁架构(或使用一种语言)像 Haskell 一样,编译器甚至可以强制执行 Clean Architecture)。

这激发了我想出一个餐厅预订软件的草稿(如果你有兴趣,检查和构建 repo 应该是轻而易举的)(忠于 Mark Seemann 的领域;))。但是,我不完全确定这个草案中的用例层是否可以称为纯粹的,我希望得到比我自己更多的 FP 经验和知识的人的反馈。

实体层

一个基本用例是尝试为我们餐厅的一定数量的座位创建新的预订。我已经通过以下方式为实体层建模:

这里没有什么太花哨的东西,只是一个检查是否可以预订一定数量的请求座位的功能。一些错误和结果类也在下面以及(为了简单起见)const val来模拟我们餐厅的容量。

框架/适配器 #1

为了在现实世界的应用程序中有意义,一些数据还需要存储在某种持久层中并从某种持久层中加载。所以,在我们的洋葱架构的最外层,会有一个我为这个例子模拟的数据库:

再说一次,这里没有太多事情……只是数据库读/写操作的存根。但是请注意,(按照 Arrow 提出的约定)这些函数用suspend修饰符标记为不纯函数。

用例

现在来看用例,它基本上描述了我们的应用程序流程:

  • 从 DB 获取当前保留的座位数
  • 检查请求的座位数量是否仍然可用
  • 如果是这样,保留新的保留
  • 并返回新创建的预订 ID

它被翻译成reservationUseCase函数中的代码:

这里是有趣的地方:这个函数接受一些UseCaseData作为输入,并返回一个suspend在程序入口处执行的函数,如下所示:

所以现在我的问题是:

  • reservationUseCase函数本身可以被认为是纯的吗?我读过一些博客文章(不过,以 F# 作为示例语言)建议接收不纯函数作为参数的纯函数可能是纯函数,但不能保证是纯函数。reservationUseCase在这个例子中,显然确实接收到了不纯的函数UseCaseData
  • 如果它不能被认为是纯粹的,那么如何编写一个像上面在 Kotlin 和 Arrow 中描述的那样的纯粹用例?
0 投票
1 回答
45 浏览

list - Arrow-kt:如何转动 Either>> 进入>

Either<E, List<A>>从函数调用中收到一个,需要将其List<A>转换为List<B>. 每个 A 的转换返回一个Either<E,B>,所以我的结果是一个Either<E, List<Either<E,B>>>。我怎样才能把它Either<E, List<Either<E,B>>>变成一个Either<E, List<B>>

  • Either.Left如果所有转换都成功(如果单个转换失败,则应导致)
  • 创建一个Either<E,List<B>>包含所有 B,转换成功并忽略失败的 AtoB 转换

下面是一个小代码片段:

0 投票
1 回答
39 浏览

kotlin - 如何在没有元组的情况下映射2个值

我需要取 2 个值,Either<Throwable, Any>如果每个值都是Right.

因为arrow-kt 0.11.0有可能tupled

但由于不推荐使用 tupledarrow-kt 0.12以支持 Kotlin 的 Pair 和 Triple ,因此我可以t figure out how to achieve the same without tupled 。

0 投票
1 回答
54 浏览

kotlin - 使用 Arrow 创建具有错误处理的对象构建器 - 模式匹配多个 Either

我有课A

我想为它创建一个故障安全构建器。构建器应返回Either异常列表(例如,缺少值时)或创建的值。创建这样的东西的推荐方法是什么?还是有概念上更好的方法?


我自己的处理方法:

我怎样才能最好地完成build代码?

我赞成一种避免深度嵌套(例如orElse或类似方法)并避免重复值(例如通过重新创建元组)的解决方案,因为这可能会导致拼写错误并使以后添加/删除属性变得更加困难。

0 投票
1 回答
86 浏览

kotlin - Kotlin - 推断两个泛型参数之一的类型

我正在尝试创建一个具有两种通用类型的函数:一种是具体化的,另一种是从其使用的上下文中派生的(因为它是一个扩展函数):

想法是调用仅提及具体类型的函数,例如:

其中“a”是 Either<Throwable,String> 类型的对象

但是编译器并没有让我放弃它,并且要求我指定两种泛型类型,而不是从调用函数的对象中派生第二种类型。这似乎是一件很合理的事情,但也许我错了......

这有可能实现吗?如果是这样,我做错了什么?

0 投票
1 回答
58 浏览

kotlin - 在地图内处理 Arrow-kt Either

我的问题与Kotlin arrow-kt Flatten nested Either有点相关,但也不完全是。

我有一个要映射的列表,在这个映射中我调用了一个返回 Either 的函数。如果 Either 包含错误,我需要立即退出。

我目前有这样的事情:

有没有替代品return@?有没有更好的更惯用的方法来做到这一点?

我目前正在使用 v0.8.2 的 arrow-kt ,但我可能能够更新到 1.0.1

谢谢你。