给定的

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/

10-14 04:18