标签: haskell ghc
很长时间以来,我很难理解为什么“简单”的折叠会导致Haskell的空间泄漏。 article很有帮助,但是以一种令人惊讶的方式。
我将简要引用应用于foldr的{{1}}的示例,其结果如下:
foldr
+
代替:
1 + (2 + sum1 [3..n])
正如评论所暗示的那样,即使这样也不够严格,不能在恒定的空间中运行。
这看起来像是已知函数严格且相关的编译器应该做的“显而易见的”事情。是否应将重写规则用于此目的?这是我唯一知道的选项(除了手动重写每个实例之外)。