《Functional Programming in Kotlin》(Manning) Arrow库示例代码更新求助
问题解答
1. 最新版Arrow库适配重构方案
Arrow 1.0及以上版本已经完全废弃并移除了Id类型,同时State的fx推导API也做了简化,不再要求传入外部Monad实例,直接在State.fx代码块内调用bind()即可完成状态上下文的绑定。
重构后的代码如下:
val ns2: State<RNG, List<Int>> = State.fx { val x: Int = int.bind() val y: Int = int.bind() val xs: List<Int> = ints(x).bind() xs.map { it % y } }
无需额外导入其他依赖,仅需保证引入的Arrow核心库版本为1.0及以上即可正常通过语法检查并运行。
2. 可运行原始代码的历史版本
原始代码依赖的Id类和旧版State.fxAPI最后保留的稳定版本为Arrow 0.13.2,这也是《Functional Programming in Kotlin》编写过程中使用的Arrow依赖版本,所有0.13.x系列版本均可正常运行该代码片段,2022年之后发布的1.0及以上版本均不再兼容该写法。
内容的提问来源于stack exchange,提问作者bigswifty
相关产品推荐
相关产品推荐

