问题标签 [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 回答
263 浏览

kotlin - 函数式编程短路

我正在研究函数式编程,Arrow-ktKotlin

我的用例如下:

我想执行Action并返回相关的Reaction

两者Action都有Reaction关联Side Effects

事件的顺序是

1)。在接受Action立即触发相关联的Actions Side Effects

2)。执行Action并获得Reaction

3)。触发Reactions Side Effects

4)。返回Reaction结果。

请求执行操作时要考虑的其他因素

一个)。当行动从未执行过时;完成整个序列,例如步骤 1 - 4。

乙)。执行时Action;将序列短路,以使步骤 2 - 4 未完成

C)。完成时Action;短路步骤 1 - 3 并返回Reaction结果

上面提到的副作用包括LoggingAnalyticsUser Interface效果。

我感觉我要求立即触发ActionReaction副作用意味着函数式编程解决方案不适合我的用例

Arrow-kt我发现的演示文稿和博客描述了如何根据引发的错误条件或使用withEither来短路序列,并实现相同类型的行为。OptionSomeNone

我遇到的困难

一世)。从哪里开始????

ii)。完成四个步骤,如何控制/管理“短路”,以便完成步骤 1 - 4、仅步骤 1 或仅步骤 4

是否可以使用函数式编程实现所需的行为?

0 投票
1 回答
431 浏览

android - 在哪里做 Arrow.io IO.runUnsafeSync() ?ViewModel 还是 Activity/Fragment?

我正在尝试学习 Arrow 库并通过将我的一些 Android Kotlin 代码从更命令式风格转换为函数式风格来改进我的函数式编程。我一直在应用程序中进行一种 MVI 编程,以使测试更简单。

“传统”方法

视图模型

我的视图模型有一个LiveData视图的状态加上一个公共方法将用户交互从视图传递到视图模型,因此视图模型可以以任何合适的方式更新状态。

活动

Activity 订阅LiveData并且在状态更改时,它使用状态运行渲染函数。该活动还将用户交互作为意图传递给视图模型(不要与 Android 的Intent类混淆)。

Arrow.IO 函数式编程

我很难找到使用 Arrow 的 IO monad 使副作用明显且可进行单元测试的不纯函数的示例。

查看模型

到目前为止,我已经把我的视图模型变成了:

我不知道我应该如何让这些 IO 东西Dispatcher.IO像我一直在做的那样运行viewModelScope.launch。我找不到如何使用 Arrow 执行此操作的示例。进行 API 调用的似乎都不是 Android 应用程序,因此没有关于 Android UI 与 IO 线程的指导。

查看模型单元测试

现在,因为我看到的一个好处是,当我编写视图模型的单元测试时,我可以进行测试。如果我模拟存储库以检查是否suspendFunctionManipulatingDatabase使用预期参数调用。

活动

我不知道如何将上述内容合并到我的活动中。

我的理解是 IO 块中的任何内容都不会立即运行(即它是惰性的)。您必须调用 attempt() 或 unsafeRunSync() 来获取要评估的内容。

  1. 从 Activity调用viewModel.instruct意味着我需要创建一些范围并调用Dispatchers.IO对吗?这是 Bad(TM) 吗?我能够使用“传统”方法将协程完全限制在视图模型中。

  2. 我在哪里合并Dispatchers.IO来复制我所做的viewModelScope.launch(Dispatchers.IO)

  3. 这是您在使用 Arrow 时应该构建单元测试的方式IO吗?

0 投票
0 回答
59 浏览

android - 使用 Arrow-kt IO.fx 泄漏 Android UI{}

我的 Android 应用程序中有以下 viewModel 代码

wheresideEffectsrender函数与调用 Activity 类似

我的活动从其 onCreate() 方法调用 perform 方法

这是一种安全的方法吗?

我将对我的 TextView 和 ProgressBar 的引用传递到我的 viewModel 中是否重要?

0 投票
1 回答
78 浏览

kotlin - 带箭头:如何应用 (X)->IO 类型的转换到序列类型的数据获取 IO>?

我正在使用 Arrow.kt 学习函数式编程,打算遍历路径层次结构并散列每个文件(并做一些其他事情)。强迫自己尽可能多地使用功能概念。

假设我data class CustomHash(...)已经在代码中定义了一个。下面会参考。

首先,我需要通过走路径来构建一系列文件。这是一个不纯/有效的函数,因此应该用IOmonad 将其标记为:

我需要阅读文件。再次,不纯,所以这被标记为IO

然后我有一个计算哈希的函数。如果它需要一个字节数组,那么它是完全纯的。之所以这样做,suspend是因为执行起来会很慢:

我的问题是如何以功能性的方式将所有这些链接在一起。

现在,如果我尝试这个,xIO<Sequence<IO<Hash>>>. 我很清楚为什么会这样。

有什么办法可以Sequence<IO<Any>>变成IO<Sequence<Any>>? 我想这本质上可能是术语不精确,采用在它们自己的协程中执行的代码块并在同一个协程上运行所有代码块?

如果 Sequence 不存在,我知道IO<IO<Hash>>可以在那里IO<Hash>使用 a flatMap,但Sequence当然没有 IO 功能的扁平化。

Arrow 的文档有很多“TODO”部分,并且可以非常快速地跳转到假定大量中级/高级函数式编程知识的文档。它对这个问题并没有真正的帮助。

0 投票
0 回答
89 浏览

kotlin - 为什么使用种类而不是 F

0 投票
3 回答
525 浏览

kotlin - 将选项列表映射到字符串列表

我最近一直在使用 Arrow Kotlin,但我仍然对如何将选项列表映射到它们的值感到困惑。例如:

目前我正在这样做:

但它感觉很笨重,我肯定错过了一些东西。

0 投票
2 回答
568 浏览

kotlin - ArrowKt 尝试急切执行的替代方案

ArrowKt 已弃用Try,因为它促进了效果的急切执行,并且建议使用挂起构造函数。但是我应该如何处理以下情况,即我确实希望在不使用传统try-catch 的情况下故意执行。

0 投票
1 回答
96 浏览

monad-transformers - 如何调用依赖于 Kotlin/Arrow 中多个类型类的多态函数

我已经创建了一个函数,它在它需要使用的 Monad 中是多态的,而不是依赖于这个 Monad 存在的类型类实例。它看起来像这样:

我正在使用MonadReader来获得依赖关系,并且我正在使用Effect,嗯,效果。现在我假设,我所需要的只是使用一些 Monad Transformers 来“在世界尽头”(即在main())到达这个 Monad 星座。类似的东西ReaderT<ForIO, Dependency, Unit>

但是,我似乎无法创建合适的M(或任何上下文)来调用此方法。如何在具有必要类型类实例的确切 monad 上调用此方法?

0 投票
2 回答
918 浏览

kotlin - Arrow-Kt Fx vs Kotlin 协程

我正在努力学习Arrow-Kt,因为我对Functional Programming in Kotlin.

有人可以解释为什么需要创建另一个功能几乎类似于 的构造Kotlin Coroutines吗?还是我对此的理解错了?

这两者如何结合在一起?

0 投票
1 回答
319 浏览

dependency-injection - Arrow KT:Reader Monad 与 @extension 的依赖注入

我从Jorge Castillo本人的这篇文章中读到了关于Reader Monad的内容,并且我也得到 了Paco的这篇文章。似乎两者都以不同的方式解决了这个想法。(或者我错了吗?)Dependency Injection

我真的很困惑我是否理解整个Reader Monad以及它与Simple Depenency InjectionPaco谈论的内容之间的关系。

谁能帮我理解这两件事?根据情况,我会在一个项目中同时需要它们吗?