sev*_*evo 3 haskell side-effects
给定
pure id <*> v = v
Run Code Online (Sandbox Code Playgroud)
持有,可以pure做任何可观察且不违反法律的事情吗?
如果我定义一个封装类型IO并说产生一个新线程,那么GHC可以自由地优化它吗?
编辑:我终于意识到问题实际上是关于拥有非法IO实例的后果...
GHC对类型类定律一无所知(与Idris或Coq不同),这些定律仅作为文档和编程约定存在。因此,一个实例可能是合法的,也可能是非法的,无论哪种情况,GHC优化都不会改变程序的行为。
如果您编写了一个特定的合法实例,则可以添加一条REWRITE规则来删除pure idGHC,并且GHC可能最终还会pure id在特定Applicative函子上进行优化,而这种优化的安全性显而易见。
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |