Я использую 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
представляет собой представление множества малых целых чисел в виде битового вектора. Профайлер (run with ghc -prof -auto-all
) утверждает, что функция ok
составляет 22% общего объема. Глядя на результат с помощью -ddump-simpl
, я не могу понять, почему этот код выделяется. Я проверил, и насколько я могу судить, он не выделяет thunk для вызова insert
.
Что я должен посмотреть, чтобы определить часть моего выделенного кода?