hs-bindgen-1.0.0.0: src-internal/HsBindgen/Util/Monad.hs
module HsBindgen.Util.Monad (
mapMaybeM
) where
--------------------------------------------------------------------------------
mapMaybeM :: forall a b m. Monad m => (a -> m (Maybe b)) -> [a] -> m [b]
mapMaybeM f = foldr aux (pure [])
where
aux :: a -> m [b] -> m [b]
aux x doRest = f x >>= \case
Just y -> (y :) <$> doRest
Nothing -> doRest