如何将常量适用表格制作成一个不变的适用表格,以阻止它在程序的整个生命周期中保留?
我尝试过这种方法:
-- | Dummy parameter to avoid creating a CAF
twoTrues :: () -> [[[Bool]]]
twoTrues _ = map (++ (True : repeat False)) . trueBlock <$> [1..]
Run Code Online (Sandbox Code Playgroud)
但它似乎不起作用 - 配置文件显示它仍然保留,仍然将其标记为CAF.
我发现了一个相关的Google结果,Simon Peyton-Jones对Neil Mitchell 的回复,他正好问了这个问题 - 但不幸的是,答案指的是一个死链接.
假设有人将这个简单的Python代码翻译成Haskell:
def important_astrological_calculation(digits):
# Get the first 1000000 digits of Pi!
lucky_numbers = calculate_first_digits_of_pi(1000000)
return digits in lucky_numbers
Run Code Online (Sandbox Code Playgroud)
Haskell版本:
importantAstrologicalCalculation digits =
isInfixOf digits luckyNumbers
where
luckyNumbers = calculateFirstDigitsOfPi 1000000
Run Code Online (Sandbox Code Playgroud)
在使用Haskell版本之后,程序员惊讶地发现他的Haskell版本"泄漏"内存 - 在第一次调用他的函数之后,luckyNumbers永远不会被释放.这令人不安,因为该程序包含一些更类似的功能,并且所有这些功能所消耗的内存都非常重要.
是否有一种简单而优雅的方式使程序"忘记" luckyNumbers?