Я использую 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.
Что я должен посмотреть, чтобы определить часть моего выделенного кода?