普遍认为seq / pseq函数无法在没有扩展或基本操作的标准Haskell中定义。但是,以下函数(仅使用标准Haskell 98/2010定义)的行为与它们的实际对应物之间的区别是什么?
data Seq a b = Seq !a !b
seq a b = case Seq a b of
Seq _ x -> x
data PSeq a b = PSeq !a b
pseq a b = case PSeq a b of
PSeq _ x -> x
例如,很容易检查此定义是否满足
seq ⊥ x = ⊥
其他一些简单的实验表明,seq / pseq和真实版本之间没有区别。那有什么不对?