Arrow-Kt Fx 与 Kotlin 协同程序
Arrow-Kt Fx vs Kotlin Coroutines
我正在努力学习 Arrow-Kt
因为我对 Functional Programming in Kotlin
感到好奇。
有人可以解释为什么需要创建另一个功能与 Kotlin Coroutines
几乎相似的结构吗?还是我理解错了?
这两者如何结合在一起?
Arrow fx 在处理 IO
时使用协程,而不是替换它们。类似于 Room 的扩展允许使用 Flow
.
但是,fx 可以与 Option 或 Either 等单线程组件一起使用。
val ab :Option<Int> = Option.fx {
val a: Int = maybeA.bind()
val b: Int = maybeB.bind()
a + b
}
如您所见,如果有任何可能不存在,则结果将不存在。这相当于做:
maybeA.flatMap { a ->
maybeB.map { b -> a + b }
}
处理这些功能数据类型的负载时会变得混乱。
因此,Arrow fx 帮助我们以更实用的方式处理绑定。
此外,我们现在拥有 Arrow Meta (WIP),它使用编译器插件使 Arrow 更加无缝。以后我们可以做这样的事情:
val ab :Option<Int> = Option.fx {
val a: Int by maybeA
val b: Int by maybeB
a + b
}
Arrow fx uses coroutines when dealing with IO, doesn't replace them. Similar to how Room has extensions that allow to use Flow.
这是不正确的,Arrow Fx 为 Kotlin 的挂起系统构建了一个纯函数式运行时库。就像 KotlinX Coroutines 为 Kotlin 的库构建运行时库。
因此,这两个库都提供了 Kotlin 挂起系统的实现,并且可以根据您的需要或用例互换使用或独立使用。
Arrow Fx 为 Kotlin 的挂起系统提供了一个纯功能性惰性运行时,具有副作用跟踪和 monad 理解(如 Pablisco 所示)。
它包含一个 IO
类型,相当于 suspend () -> A
并且具有许多强大的并发原语,如 Semaphore
、Queue
、Ref
、Promise
, 等等
它们都保证资源安全,同时提供强大的并发和并行组合器以及自动取消支持。
(下个版本我们也会支持suspend()->Either)
与 KotlinX Coroutines 相比,它提供了 Kotlin 挂起系统的急切实现,具有协作取消支持和冷流实现。
我正在努力学习 Arrow-Kt
因为我对 Functional Programming in Kotlin
感到好奇。
有人可以解释为什么需要创建另一个功能与 Kotlin Coroutines
几乎相似的结构吗?还是我理解错了?
这两者如何结合在一起?
Arrow fx 在处理 IO
时使用协程,而不是替换它们。类似于 Room 的扩展允许使用 Flow
.
但是,fx 可以与 Option 或 Either 等单线程组件一起使用。
val ab :Option<Int> = Option.fx {
val a: Int = maybeA.bind()
val b: Int = maybeB.bind()
a + b
}
如您所见,如果有任何可能不存在,则结果将不存在。这相当于做:
maybeA.flatMap { a ->
maybeB.map { b -> a + b }
}
处理这些功能数据类型的负载时会变得混乱。
因此,Arrow fx 帮助我们以更实用的方式处理绑定。
此外,我们现在拥有 Arrow Meta (WIP),它使用编译器插件使 Arrow 更加无缝。以后我们可以做这样的事情:
val ab :Option<Int> = Option.fx {
val a: Int by maybeA
val b: Int by maybeB
a + b
}
Arrow fx uses coroutines when dealing with IO, doesn't replace them. Similar to how Room has extensions that allow to use Flow.
这是不正确的,Arrow Fx 为 Kotlin 的挂起系统构建了一个纯函数式运行时库。就像 KotlinX Coroutines 为 Kotlin 的库构建运行时库。
因此,这两个库都提供了 Kotlin 挂起系统的实现,并且可以根据您的需要或用例互换使用或独立使用。
Arrow Fx 为 Kotlin 的挂起系统提供了一个纯功能性惰性运行时,具有副作用跟踪和 monad 理解(如 Pablisco 所示)。
它包含一个 IO
类型,相当于 suspend () -> A
并且具有许多强大的并发原语,如 Semaphore
、Queue
、Ref
、Promise
, 等等
它们都保证资源安全,同时提供强大的并发和并行组合器以及自动取消支持。
(下个版本我们也会支持suspend()->Either)
与 KotlinX Coroutines 相比,它提供了 Kotlin 挂起系统的急切实现,具有协作取消支持和冷流实现。