我不完全清楚 seq 在 Haskell 中的工作原理。
似乎在很多情况下编写会很有用
seq x x
甚至可以定义一个函数:
strict x = seq x x
但是这样的功能还不存在,所以我猜这种方法在某种程度上是错误的。有人可以告诉我这是否有意义或有用吗?
最佳答案
seq a b
返回 b
的值, 但使该值取决于 a
的评估.因此,seq a a
与 a
完全相同.
我认为这里的误解是 seq
不采取任何行动,因为纯函数不采取行动,它只是引入了依赖关系。
有一个功能evaluate :: a -> IO ()
在 Control.Exception
这就是你想要的(注意它在 IO
中)。他们将其置于异常中,因为查看表达式的求值是否会抛出异常很有用,如果是,则处理异常。
关于haskell - 你会写 seq x x 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23570589/