Kotlin是否支持monadic理解?

时间:2015-12-13 06:09:13

标签: kotlin

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

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

2 个答案:

答案 0 :(得分:6)

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

  

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

     

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

source

答案 1 :(得分:1)

没有特殊的关键字(do / for),因此无法像其他语言一样直接翻译为嵌套的flatMap(消除重复)。

但是,可以用协程实现单子理解。

摘自Arrow文档:https://arrow-kt.io/docs/patterns/monad_comprehensions/#comprehensions-over-coroutines

  

对协程的理解

     

此功能有多个名称:异步/等待,协程,执行   表示法,用于理解...每个版本都包含某些唯一   点,但都是基于相同的原理。在科特林,协程   (在该语言的版本1.1中引入)使编译器能够   将看似同步的代码重写为异步序列的过程。   Arrow使用编译器的此功能为您带来   对Monad类型类的所有实例都具有类似协程的表示法。

     

这意味着可以对Option,Try,List,   读取器,Observable,Flux或IO都相同。

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