it should be noted that this can be viewed as a special case of the witherable packages lovely interfaces

http://hackage.haskell.org/package/witherable-0.3 , which has related things like 
witherM :: Monad m => (a -> m (Maybe b)) -> t a -> m (t b)

On Fri, Feb 8, 2019 at 12:04 PM Carter Schonwald <carter.schonwald@gmail.com> wrote:
friend asked me to raise this

previously https://ghc.haskell.org/trac/ghc/ticket/2042
seems like it iddn't happen last time because base lived outside of ghc?

-- | The 'concatMapM' function generalizes 'concatMap' to arbitrary monads.
concatMapM        :: (Monad m) => (a -> m [b]) -> [a] -> m [b]
concatMapM f xs   =  liftM concat (mapM f xs)