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