
Andrew Coppin wrote:
Does it suggest unfoldr too?
I think Neil's idea to have this customizable is a good one. It's often a matter of taste. I would rarely want to use unfoldr, and I wouldn't want HList to bother me about it. Instead, I prefer to use iterate for both of Andrew's examples:
convert b 0 = [] convert b n = n `mod` b : convert b (n `div` b)
convert b = unfoldr (\n -> if n > 0 then Just (n `mod` b, n `div` b) else Nothing)
convert b = map (`mod` b) . takeWhile (> 0) . iterate (`div` b)
heap_to_list = unfoldr (\h -> if heap_empty h then Nothing else Just (heap_top h, heap_delete_top h))
heap_to_list = map heap_top . takeWhile (not . heap_empty) . iterate heap_delete_top Here is one case where I actually do use unfoldr: -- Mine free-form user input for occurrences of a data type readMany = unfoldr $ listToMaybe . concatMap reads . tails ghci> readMany "The numbers are 3, 7, and 42." :: [Int] [3,7,42] But I don't believe HLint should be expected to come up with something like that. It's quite rare. Regards, Yitz