Don't forget Hoogle[1], the type-based search engine! Let's say that I want to combine a couple of my lists into one list. I know what my inputs look like, and I know what I want my output to look like.
So I go to Hoogle, and search for "[a] -> [b] -> [(a, b)]". First result is "zip".
Or I want to get only the things in a list that satisfy a predicate, but I'm suffering from nominal amnesia. I type in "(a -> Bool) -> [a] -> [a]" and Hoogle lets me know that I meant to write "filter".
[1] http://www.haskell.org/hoogle/?hoogle=%28a+-%3E+Bool%29+-%3E...