Kotlin是否支持monadic理解?

Win*_*ung 14 kotlin

就像C#中的LINQ一样,对于Scala中的理解,Kotlin中有类似的东西吗?如果不支持,是否有计划?


编辑:答案是理解支持在桌面上.

use*_*562 6

在Kotlin 1.1的预览版中,有通用async/ await语法可用于不同类型的monadic理解:

许多语言(从2012年的C#开始)通过专用语言结构(如async/await关键字)支持异步编程.在Kotlin中,我们概括了这个概念,以便库可以定义这些构造的自己版本,而async不是关键字,而只是一个函数.

这种设计允许集成不同的异步API:期货/承诺,回调传递等.它也足以表达惰性生成器(yield)并涵盖其他一些用例.

资源


fde*_*ert 6

没有特殊的关键字(do/for),因此不像其他语言那样直接翻译为嵌套的 flatMap(脱糖)。

\n\n

但一元理解可以通过协程来实现。

\n\n

来自 Arrow 文档:https://arrow-kt.io/docs/patterns/monad_com经理/#com经理-over-coroutines

\n\n
\n

对协程的理解

\n\n

此功能有多个名称:async/await、协程、do\n 表示法、理解\xe2\x80\xa6 每个版本都包含某些独特的\n 点,但都源自相同的原理。在 Kotlin 中,协程\n(在该语言的 1.1 版中引入)使编译器能够\n 将看似同步的代码重写为异步序列。\n Arrow 使用编译器的这种功能为您提供\n 类似于协程的表示法。 Monad 类型类的实例。

\n\n

这意味着推导式同样适用于 Option、Try、List、\n Reader、Observable、Flux 或 IO。

\n
\n\n

对于协程,另请参阅“深入了解 JVM @ KotlinConf 2017 上的协程”: https ://www.slideshare.net/elizarov/deep-dive-into-coroutines-on-jvm-kotlinconf-2017?next_slideshow=1

\n