[Haskell-cafe] unfoldr [ANN: HLint 1.2]

Yitzchak Gale gale at sefer.org
Tue Jan 13 08:45:02 EST 2009

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]

But I don't believe HLint should be expected to come up with
something like that. It's quite rare.


More information about the Haskell-Cafe mailing list