私はGHC7.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
は、ビットベクトルとしての小さな整数のセットの表現です。プロファイラー(で実行)は、関数が全体の割り当ての22%を占めるとghc -prof -auto-all
主張しています。ok
で出力を見ると、-ddump-simpl
なぜこのコードが割り当てられているのか理解できません。確認しましたが、私が知る限り、への呼び出しにサンクを割り当てていませんinsert
。
コードの割り当て部分を特定するには、何を確認する必要がありますか?