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