
Neil Mitchell wrote:
Hi Andrew,
HLint will automatically detect if you should have used a map, a foldr or a foldl and suggest how to change your code. In the GHC, darcs and Hoogle code bases there are no obvious map-like functions, which is a good sign :-)
...What an intriguing idea. Clearly I'm going to have to play with this sometime soon.
Does it suggest unfoldr too?
No, but it could do in the future - I never use unfold's in my code, so am not really familiar with them. But I will look into them, do you have any examples where it should suggest unfoldr so I can play with them?
Off the top of my head, try this: convert b 0 = [] convert b n = n `mod` b : convert b (n `div` b) (Takes a number and yields the radix-B representation of it. Backwards.) convert b = unfoldr (\n -> if n > 0 then Just (n `mod` b, n `div` b) else Nothing) It's also useful for converting a data structure into a list: heap_to_list = unfoldr (\h -> if heap_empty h then Nothing else Just (heap_top h, heap_delete_top h)) Those are the major uses I'm aware of. I'm sure somebody else will think of others. (IIRC, unstream is implemented as an unfold...?)