可以用seq来定义pseq吗?
据我所知, seq ab
评估(力) a
和b
返回前b
。 它并不保证首先评估a
。
pseq ab
计算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 ab
计算a
之前b
。
是xseq
的有效实施pseq
? 如果不是,上述参数有什么问题(是否可以根据seq
定义pseq
)?