Evan,
On the catMaybes thing, I have a function 'mapMaybe = Maybe.catMaybes
. map'. I turns out I only ever used catMaybes after mapping a Maybe
function, so I hardly ever use catMaybes anymore. I suppose it should
have been maybeMap for consistency with concatMap.