Add decent mapMaybe implementation