我试图更好地理解seqon ->-typed值的效果/含义,或者更确切地说WHNF对于值的意义->.
Haskell报告定义seq为
seq ? b = ?
seq a b = b, if a ? ?
Run Code Online (Sandbox Code Playgroud)
该报告还指出,由于上述定义
? is not the same as \x -> ?, since seq can be used to distinguish them
Run Code Online (Sandbox Code Playgroud)
如果我有以下定义
f, g :: () -> ()
g = ?
f = \x -> g x
Run Code Online (Sandbox Code Playgroud)
然后f应该在语法上等同于g(不应该吗?),但表达式应该是什么
seq f ()
seq g ()
Run Code Online (Sandbox Code Playgroud)
根据Haskell报告评估?
根据给出的规则:
\n\nseq f ()\nseq (\\x -> g x) ()\n()\n\nseq g ()\nseq \xe2\x8a\xa5 ()\n\xe2\x8a\xa5\nRun Code Online (Sandbox Code Playgroud)\n\n这是因为它(\\x -> g x)是一个闭包,并且在有需要评估的内容之前无法对其进行评估。
另一种评估顺序:
\n\nseq f ()\nseq (\\x -> g x) ()\nseq (\\x -> \xe2\x8a\xa5) ()\n()\nRun Code Online (Sandbox Code Playgroud)\n\n仍然给出相同的结果。
\n| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |