summaryrefslogtreecommitdiff
path: root/Utility/Monad.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Utility/Monad.hs')
-rw-r--r--Utility/Monad.hs6
1 files changed, 6 insertions, 0 deletions
diff --git a/Utility/Monad.hs b/Utility/Monad.hs
index 2c9b9e9e0..6abd7ee5d 100644
--- a/Utility/Monad.hs
+++ b/Utility/Monad.hs
@@ -16,6 +16,12 @@ firstM :: Monad m => (a -> m Bool) -> [a] -> m (Maybe a)
firstM _ [] = return Nothing
firstM p (x:xs) = ifM (p x) (return $ Just x , firstM p xs)
+{- Runs the action on values from the list until it succeeds, returning
+ - its result. -}
+getM :: Monad m => (a -> m (Maybe b)) -> [a] -> m (Maybe b)
+getM _ [] = return Nothing
+getM p (x:xs) = maybe (getM p xs) (return . Just) =<< p x
+
{- Returns true if any value in the list satisfies the predicate,
- stopping once one is found. -}
anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool