目前,我知道将副作用集成到纯函数式编程语言中的以下方法:
- 效果系统
- 继续
- 独特的类型
- 单子
单子经常被认为是最有效和最通用的方法。
还存在哪些其他方法?他们如何比较?
目前,我知道将副作用集成到纯函数式编程语言中的以下方法:
单子经常被认为是最有效和最通用的方法。
还存在哪些其他方法?他们如何比较?
箭头,比单子更通用。
最简单的方法是简单地在函数之间传递环境。这通常用于教授方案。
对我来说,更一般的方法是通过 monad/comonad 对。这概括了应该正确称为“强单子”方法的常见“单子”方法,因为它仅适用于强单子。
移动到 monad/comonad 对允许对导致某些变量不再可用的影响进行建模。这很有用的一个示例是将线程迁移到分布式设置中的另一个主机的效果。
另一种具有历史意义的方法是使整个程序成为一个函数,将输入事件的流/列表映射到输出事件的流/列表。请参阅:Phil Wadler 的“如何声明命令”:http ://www.cs.bell-labs.com/~wadler/topics/monads.html#monadsdeclare