有没有理由不在大多数时间使用StrictPragma?

时间:2015-11-16 09:08:33

标签: haskell lazy-evaluation evaluation

未来的GHC版本将支持https://ghc.haskell.org/trac/ghc/wiki/StrictPragma

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

严格的评估可以更好地表现和理解代码执行。

是的,有一些功能,例如(&&),你需要使用延迟参数,但它应该经常使用~

那么,大部分时间都没有理由不使用StrictPragma吗?

1 个答案:

答案 0 :(得分:5)

这实际上取决于手头的数据类型。在列表上它会非常有害。

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

可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间。

无限列表成语变得不可能

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

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