haskell - `pure x::IO a` 是纯值还是有副作用的值?

标签 haskell side-effects

给定

pure id <*> v = v

持有,pure 可以做任何可观察的事情而不违反法律吗?

如果我定义一个封装 IO 的类型并说,生成一个新线程,GHC 是否可以免费优化它?

编辑:我终于意识到这个问题实际上是关于非法 IO 实例的后果......

最佳答案

GHC 对类型类法则一无所知(不像 Idris 或 Coq),它们仅作为文档和编程约定存在。因此,实例可以是合法的也可以是非法的,无论哪种情况,GHC 优化都不会改变程序行为。

如果你写一个特定的合法实例,那么你也许可以添加一个REWRITE规则让GHC删除pure id,GHC也可能最终优化pure id 远离特定的 Applicative 仿函数,这种优化的安全性显而易见。

关于haskell - `pure x::IO a` 是纯值还是有副作用的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54100390/

相关文章:

ruby - 从 FP 的角度来看,在 YARV Ruby 中创建线程通常被视为副作用吗?

reactjs - 为什么我们应该避免组件构造函数中的副作用?

java - 流的有状态和无状态方法

reactjs - React 中副作用的定义和函数式编程中的一样吗?

haskell - 封闭括号内的美元符号

haskell - 当没有绑定(bind)时,haskell 中缺乏多态推断

haskell - take 2 $ [1..] 如何在 haskell 中工作?

Clojure 中的单元测试副作用

Haskell 对函数结果进行模式匹配

haskell - 索引向量中类型参数的顺序