Gather first letter from each string in a list of strings
Well a few thoughts, of all String = [Char] so we could really give the signature

firstLetters :: [String] -&gt; String


Whether you think this is better is a matter of taste. Second, you should take a look at

Data.Maybe.mapMaybe :: (a -&gt; Maybe b) -&gt; [a] -&gt; [b]


It's exactly what you'd expect, it applies a function to Maybes and prunes out the Nothings. This simplifies the slightly ugly concat bit.

 firstLetters = mapMaybe safeHead


Much clearer :) In the interest of teaching you to fish, here's how I found the name of mapMaybe