在Haskell中将关联功能标记为严格,以避免空间泄漏

时间:2019-04-11 20:33:05

标签: haskell ghc

很长时间以来,我很难理解为什么“简单”的折叠会导致Haskell的空间泄漏。 article很有帮助,但是以一种令人惊讶的方式。

我将简要引用应用于foldr的{​​{1}}的示例,其结果如下:

+

代替:

1 + (2 + sum1 [3..n])

正如评论所暗示的那样,即使这样也不够严格,不能在恒定的空间中运行。

这看起来像是已知函数严格且相关的编译器应该做的“显而易见的”事情。是否应将重写规则用于此目的?这是我唯一知道的选项(除了手动重写每个实例之外)。

0 个答案:

没有答案