【发布时间】:2017-01-25 10:13:10
【问题描述】:
我认为 seq 很难理解,因为它是 WHNF 的第一个参数。
如果 seq 将第一个参数转换为范式,那就很容易理解了。
使用 WHNF 比 NF 有什么好处?
为什么haskell委员会选择在seq函数中使用WHNF?
【问题讨论】:
-
使用您建议的版本,
seq在更少的输入上会很有用。例如,seq [1..]永远不会终止。 -
我不知道这是否会有所帮助(顺便说一下),但
seq可以评估一个thunk。它不是用来递归评估 thunk 的。如果你想递归地做,你也可以这样做,这就是包deepseq的意义所在。 -
仅供参考,除了基准测试代码之外,我见过的情况很少,
deepseq实际上是适合这项工作的工具。这是一把非常重的锤子。 -
@dfeuer 并行。这是必不可少的,对于那个单一的用例,我发现自己经常使用它。不过,我确实同意您的想法;除了你所说的基准测试之外,我还没有找到任何用例。