`\ x - >⊥x`等于(在`seq`下)到`⊥`,`\ x - >⊥`还是什么都没有?

hvr*_*hvr 8 haskell

我试图更好地理解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报告评估?

nul*_*nge 4

根据给出的规则:

\n\n
seq f ()\nseq (\\x -> g x) ()\n()\n\nseq g ()\nseq \xe2\x8a\xa5 ()\n\xe2\x8a\xa5\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是因为它(\\x -> g x)是一个闭包,并且在有需要评估的内容之前无法对其进行评估。

\n\n

另一种评估顺序:

\n\n
seq f ()\nseq (\\x -> g x) ()\nseq (\\x -> \xe2\x8a\xa5) ()\n()\n
Run Code Online (Sandbox Code Playgroud)\n\n

仍然给出相同的结果。

\n