【发布时间】:2014-10-23 22:22:26
【问题描述】:
我看到 Haskell 有一个叫“延迟”的睡眠函数:Control.Concurrent.Thread.Delay
我的问题是:如果 Haskell 纯粹是功能性的,怎么可能有这样的东西?睡眠不是附带效应还是我错过了什么?
【问题讨论】:
-
@simonzack 不正确。 Haskell 纯粹是功能性的。
IOmonad 构建了一个单独的副作用程序。通过严格分离 sdie 影响函数(如delay),我们可以处理看起来不纯的事情,但实际上只是纯粹生成指令来做不纯的事情。 -
如果 Haskell 完全是纯功能性的,那么它的好处就是给房间供暖。除了在不打印任何内容的情况下运行计算之外,您永远不会做任何事情。就目前而言,IO 是可能的,但正如 jozefg 所说,IO monad 或多或少地构建了一个纯指令序列来执行,然后运行时解释它以执行不纯的操作。您可能有兴趣查看 Free monad,它可以让您非常简单地构建“语言”,您可以用不同的方式进行解释。
-
基于标题,我非常想将这个问题作为离题结束,应该在 travel.stackexchange.com 上。
-
@bheklilr:发热是一种副作用。
-
你可以说所有的haskell都是纯粹的函数式编程,包括使用
IO a类型的东西,除了任何成功绑定到main的魔法实际上都会发生。
标签: haskell