module Ribosome.Data.Foldable( findMapMaybeM, ) where import Control.Monad (foldM) findMapMaybeM :: (Monad m, Foldable f) => (a -> m (Maybe b)) -> f a -> m (Maybe b) findMapMaybeM :: (a -> m (Maybe b)) -> f a -> m (Maybe b) findMapMaybeM a -> m (Maybe b) f f a fa = (Maybe b -> a -> m (Maybe b)) -> Maybe b -> f a -> m (Maybe b) forall (t :: * -> *) (m :: * -> *) b a. (Foldable t, Monad m) => (b -> a -> m b) -> b -> t a -> m b foldM Maybe b -> a -> m (Maybe b) evaluate Maybe b forall a. Maybe a Nothing f a fa where evaluate :: Maybe b -> a -> m (Maybe b) evaluate (Just b b) a _ = Maybe b -> m (Maybe b) forall (m :: * -> *) a. Monad m => a -> m a return (b -> Maybe b forall a. a -> Maybe a Just b b) evaluate Maybe b Nothing a a = a -> m (Maybe b) f a a