我正在使用 GHC 7.4 编译以下函数:
nodups' :: [Int] -> Bool
nodups' = ok empty
where ok _ [] = True
ok seen (n:ns) = not (n `member` seen) && ok (n `insert` seen) ns
member n word = testBit word n
insert n word = setBit word n
empty = 0 :: Int
该函数在小整数列表中查找重复元素。该集合seen
是将一组小整数表示为位向量。分析器(使用 运行ghc -prof -auto-all
)声称该ok
函数占总体分配的 22%。查看带有 的输出-ddump-simpl
,我不明白为什么要分配此代码。我检查了一下,据我所知,它没有为调用分配 thunk 到insert
.
我应该看什么来识别正在分配的代码部分?