未来的GHC版本将支持https://ghc.haskell.org/trac/ghc/wiki/StrictPragma。
因此,评估可能类似于其他语言,如C,JavaScript等。
严格的评估可以更好地表现和理解代码执行。
是的,有一些功能,例如(&&),你需要使用延迟参数,但它应该经常使用~
。
那么,大部分时间都没有理由不使用StrictPragma吗?
答案 0 :(得分:5)
这实际上取决于手头的数据类型。在列表上它会非常有害。
f n = foldl' (+) 0 [1..n]
可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间。
无限列表成语变得不可能
head $ filter p [1..]
zip xs [1..]
fibs = 0:1:zipWith (+) fibs (tail fibs)
在高性能数字代码中,严格性通常会带来更好的性能。