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 f fa = foldM evaluate Nothing fa where evaluate (Just b) _ = return (Just b) evaluate Nothing a = f a