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

android - 如何在我的 android gradle groovy dsl 构建文件中配置 ksp

我正在研究我当前的 android 项目中的 io.arrow.kt 函数式编程库。

我在配置使用 ksp 生成源代码的光学模块时遇到困难

我的项目gradle类似于这个

与我的 android 子模块类似

我的 android kotlin 代码中的光学代码虽然无法编译

因为在注释掉的代码中找不到公司

ksp 可以在安卓上运行吗?我在我的 gradle 构建文件中犯了什么错误?

0 投票
2 回答
114 浏览

kotlin - 箭头挂起函数与单子理解之间的关系

我是 Arrow 的新手,并试图建立我的心智模型来了解它的效果系统是如何工作的;特别是它如何利用 Kotlin 的suspend系统。我非常模糊的理解如下;如果有人可以确认,澄清或更正它,那就太好了:

因为 Kotlin 不支持更高级的类型,所以将 applicatives 和 monads 实现为类型类是很麻烦的。相反,arrow 从 Kotlin 的挂起机制提供的延续原语中为 Arrow 的所有单子类型派生其单子功能(绑定和返回)。这是正确的吗?特别是,短路行为(例如,fornullableeither)以某种方式实现为定界延续。我不太明白 Kotlin 的暂停机制的哪个特定功能在这里发挥了作用。

如果以上大致正确,我有两个后续问题:我应该如何包含非 IO 单子操作的范围?举一个简单的对象构造和验证示例:

在 Haskell 的 do-notation 中,这将是

在这两种情况下,该函数都返回 monad 类型(一个可为空的值,分别是 Maybe)。然而,虽然我可以在任何我认为合适的地方使用 Haskell 中的纯函数,但 Kotlin 中的挂起函数只能从挂起函数中调用。这样,Arrow 中一个简单的、非 IO monad 理解的行为就像一个 IO monad,必须在我的代码库中进行线程化;我想这是因为挂起机制是为实际的 IO 操作设计的。在 Arrow 中实现非 IO monad 理解而不使所有函数都变成挂起函数的推荐方法是什么?或者这实际上是要走的路?

第二:如果除了非 IO 单子(可为空、读取器等)之外,我还想要 IO - 例如,读取文件并解析它 - 我将如何结合这两种效果?说会有多个挂起范围对应于所涉及的不同 monad 是否正确,并且我需要以某种方式嵌套这些范围,就像我在 Haskell 中堆叠 monad 转换器一样?

上面的两个问题可能意味着我仍然缺乏在 Kotlin 的挂起机制上基于 continuation 的实现与 Haskell 中的通用 monad-as-typeclass 实现之间架起桥梁的心智模型。

0 投票
1 回答
53 浏览

kotlin - 有没有办法在 Kotlin Flow 中使用 monad 理解

Kotlin 协程和 Arrow 是避免嵌套平面图的好方法,在 Kotlin 中引入了单子推导。然而 Kotlin 的Flow类型仍然依赖于声明式平面映射,所以我们混合了直接和声明式风格:

val count一直被束缚在either {...}领悟之内。但是,似乎没有办法对 做同样的事情Flow,迫使我们嵌套一个flatmapMerge().

有没有办法做到这一点,还是计划在不久的将来以某种方式包含在内?

0 投票
1 回答
39 浏览

kotlin - 如何从 Arrow-kt 中的嵌套 Eithers 中传播错误?

我有一些看起来像这样的代码:

这将吞噬来自 any2() 的错误。

如果可能的话,我正在尝试找到一种方法从 any2 中抛出此错误。

我知道我可以做这样的事情:

但是在我需要它之前调用它似乎很奇怪!

关于如何更改 any4() 的任何想法?抱歉,如果这是一个 n00b 问题,但我仍在尝试围绕函数式编程和 Arrow 进行思考。

谢谢你。