如何将常量适用表格制作成一个不变的适用表格,以阻止它在程序的整个生命周期中保留?
我尝试过这种方法:
-- | 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 的回复,他正好问了这个问题 - 但不幸的是,答案指的是一个死链接.
以下代码为类型的量词计算数字树1Quant,类似于函数的类型all和any:
treeOfNumbers :: [(Integer, Integer)]
treeOfNumbers =
[0..] >>= \ row ->
let
inc = [0 .. row]
dec = reverse inc
in
zip dec inc
type Quant = (Integer -> Bool) -> [Integer] -> Bool
check :: Quant -> (Integer, Integer) -> Bool
check q (m,n) =
q (\ d -> d - m > 0) [1 .. domN]
where
domN = m + n
genTree :: Quant -> [(Integer, Integer)]
genTree …Run Code Online (Sandbox Code Playgroud)