纯函数式编程语言中的副作用方法

时间:2009-08-11 06:35:05

标签: monads continuations side-effects purely-functional effect-systems

目前我已经意识到将副作用集成到纯函数式编程语言中的以下方法:

  • 效果系统
  • 延续
  • 独特类型
  • 单子

Monad经常被认为是最有效和最通用的方法。

还有哪些其他方法?他们如何比较?

3 个答案:

答案 0 :(得分:1)

Arrows,比monad更通用。

答案 1 :(得分:0)

最简单的方法是简单地在函数之间传递环境。这通常用于教授计划。

答案 2 :(得分:0)

对我来说,更通用的方法是通过monad / comonad对。这概括了常见的“monad”方法,它应该被正确地称为“强monad”方法,因为它只适用于强monad。

移动到monad / comonad对允许对效果进行建模,导致某些变量不再可用。这很有用的一个例子是在分布式设置中将线程迁移到另一台主机的效果。

另一种历史感兴趣的方法是使整个程序成为将输入事件的流/列表映射到输出事件的流/列表的函数。请参阅:Phil Wadler撰写的“如何宣布命令”:http://www.cs.bell-labs.com/~wadler/topics/monads.html#monadsdeclare