Arrow Kt Fx vs Kotlin合作项目

Arrow Kt Fx vs Kotlin合作项目,kotlin,kotlin-coroutines,arrow-kt,Kotlin,Kotlin Coroutines,Arrow Kt,自从我对Kotlin中的函数式编程产生了好奇以来,我一直在努力学习Arrow Kt 有人能解释为什么需要创建另一个功能几乎与Kotlin协同程序类似的结构吗?还是我的理解有误 这两者是如何结合在一起的?Arrow fx在处理IO时使用协同程序,而不是替代它们。类似于文件室的扩展,允许使用流 但是,fx可以与单线程组件一起使用,如Option或任意一种 val ab :Option<Int> = Option.fx { val a: Int = maybeA.bind() va

自从我对Kotlin中的函数式编程产生了好奇以来,我一直在努力学习
Arrow Kt

有人能解释为什么需要创建另一个功能几乎与Kotlin协同程序类似的结构吗?还是我的理解有误


这两者是如何结合在一起的?

Arrow fx在处理
IO
时使用协同程序,而不是替代它们。类似于文件室的扩展,允许使用

但是,fx可以与单线程组件一起使用,如Option或任意一种

val ab :Option<Int> = Option.fx {
  val a: Int = maybeA.bind()
  val b: Int = maybeB.bind()
  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
}
val ab:Option=Option.fx{
val a:Int由maybeA提供
val b:Int by maybeB
a+b
}

Arrow fx在处理IO时使用协程,而不是替换它们。类似于房间中允许使用流的扩展


这是错误的,Arrow Fx为Kotlin的挂起系统构建了一个纯功能运行库。就像KotlinX公司为Kotlin的库构建运行时库一样

因此,这两个库都为Kotlin的suspend系统提供了一个实现,并且可以根据您的需要或用例灵活地或独立地使用

Arrow Fx为Kotlin的suspend系统提供了一个纯功能性的惰性运行时,具有副作用跟踪和单子理解(如Pablisco所示)

它包含一个
IO
类型,它相当于
suspend()->A
,并具有许多强大的并发原语,如
信号量
队列
引用
承诺
,等等。 它们都保证了资源安全,同时提供了强大的并发和并行组合器以及自动取消支持。 (在下一个版本中,我们还将支持suspend()->)


与KotlinX Coroutines相反,KotlinX Coroutines提供了Kotlin的挂起系统的热切实现,并提供了合作取消支持和冷流实现。

这是否意味着我不需要使用Coroutines?为什么我使用arrow?协同流程如何?我可以将协程流与arrow集成吗?或者arrow中也有类似的工具吗?“arrow Fx为Kotlin的挂起系统构建了一个纯功能运行库”。。如果我理解正确的话,arrow使用了挂起函数,但没有使用协同程序(launch、deffered等)来运行这些挂起函数?@ArchieG.Quiñones没错,arrow没有使用KotlinX协同程序,但它只使用标准库中的函数。因此,它不使用launch、deferred、CoroutineScope,也不在类路径上提供这些函数。因此,在使用Arrow Fx时,您也不必使用协同程序,可以仅使用Arrow Fx。Arrow目前没有提供流程的替代方案,但下一步将积极开展这项工作。绝对有可能!我们已经有了一个KotlinX模块,但目前它只添加了一些与结构化并发进行互操作的方法。但我们肯定可以像RxJava和Reactor一样添加对
流的支持。如果您有兴趣在该领域工作或提供帮助,我很乐意在Slack上提供更多详细的帮助:)这是该模块的路线图。太棒了!在接下来的几天里,我将更多地学习arrow,希望我能得出一个我能帮助的观点!:D
val ab :Option<Int> = Option.fx {
 val a: Int by maybeA
 val b: Int by maybeB
 a + b
}