据我所知,seq a b评估 (forces)a和b返回之前b。它不保证a首先评估。
pseq a b首先评估a,然后评估/返回b。
现在考虑以下几点:
xseq a b = (seq a id) b
函数应用程序需要先对左操作数求值(得到一个 lambda 形式),并且在进入函数之前不能盲目地求右操作数,因为这会违反 Haskell 的非严格语义。
因此(seq a id) b必须首先评估seq a id,它强制a和id(以某种未指定的顺序(但评估id什么都不做)),然后返回id b(即b);因此在 之前xseq a b进行评估。ab
是xseq有效的实现pseq吗?如果不是,那么上述论点有什么问题(并且是否可以完全定义pseq)seq?