【发布时间】:2019-02-27 07:03:09
【问题描述】:
我想知道 Haskell 中 IORef 的用法是否合法?更具体地说,如果有人可以解决以下问题或指出适当的地方以了解更多信息,我将不胜感激:
- 使用 IORef 是否被认为是一种糟糕的 Haskell 实践?如果是,为什么?更具体地说,它比 IO monad 好还是坏?
如果想为程序添加状态,状态单子不是更好(更纯粹)的方法吗?如果一个人感觉更有必要,难道他还不能使用 STM 和 MVar,而且还能过得更好吗?
是否存在使用 IORef 而不是 STM、MVar 或纯 IO 可以轻松处理的编程场景?
我正在阅读一篇将 IORef 用于代码 sn-ps 的论文,由于我对 IORef 的负面看法,这对我来说很难阅读。与其沉溺于我的无知,我认为向我的 Haskeller 同伴寻求帮助可能是一个更好的主意。
【问题讨论】:
-
Related,虽然我不会称其为 dup。
-
我可能只在涉及并发的情况下使用 IORef。是的,使用 IORef 来编写命令式代码会很糟糕。 MVar 和 STM 变量很棒,但如果 IORef 满足您的需求,那么使用它并没有错。
-
我猜论文是并发的?如上所述,我还没有真正在并发应用程序之外看到过 IORef。
-
@AJFarmar 这篇论文是关于在软件安全领域使用类型理论的。