大多数时候有什么理由不使用 StrictPragma 吗?

Is there any reason not to use StrictPragma most of the time?

以后的GHC版本会支持https://ghc.haskell.org/trac/ghc/wiki/StrictPragma

因此评估可能类似于 C、JavaScript 等其他语言

对于性能和对代码执行的理解,严格评估看起来更好。

是的,有像(&&)这样的函数需要使用惰性参数,但应该经常使用,可以使用~

那么,大多数时候不使用 StrictPragma 有什么理由吗?

这真的取决于手头的数据类型。在清单上,这将是非常有害的。

f n = foldl' (+) 0 [1..n]

可以是 运行 常量 space(即使没有砍伐森林)。如果列表类型是严格的,则需要线性 space.

无限列表成语变得不可能

head $ filter p [1..]
zip xs [1..]
fibs = 0:1:zipWith (+) fibs (tail fibs)

在高性能数字代码中,严格性通常会带来更好的性能。