给定的
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/