summaryrefslogtreecommitdiff
path: root/Utility/Monad.hs
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2024-03-19 19:47:48 +0800
committerSean Whitton <spwhitton@spwhitton.name>2024-03-19 19:47:48 +0800
commit4b47032686c52de5bf2324c1b1d4151c5fd6c41b (patch)
tree85098e25c0a4ad383f267fd59d591346d5e09a17 /Utility/Monad.hs
parent34f99f9355c275917ff91539bbdac60a56ad7e17 (diff)
parent4993eab4a4507d52037ff74c67f6ca04d2401b5e (diff)
downloadgit-repair-4b47032686c52de5bf2324c1b1d4151c5fd6c41b.tar.gz
Merge tag '1.20230814'
tagging package git-repair version 1.20230814
Diffstat (limited to 'Utility/Monad.hs')
-rw-r--r--Utility/Monad.hs8
1 files changed, 8 insertions, 0 deletions
diff --git a/Utility/Monad.hs b/Utility/Monad.hs
index abe06f3..6cd2c5e 100644
--- a/Utility/Monad.hs
+++ b/Utility/Monad.hs
@@ -12,6 +12,7 @@ module Utility.Monad (
getM,
anyM,
allM,
+ partitionM,
untilTrue,
ifM,
(<||>),
@@ -45,6 +46,13 @@ allM :: Monad m => (a -> m Bool) -> [a] -> m Bool
allM _ [] = return True
allM p (x:xs) = p x <&&> allM p xs
+partitionM :: Monad m => (a -> m Bool) -> [a] -> m ([a], [a])
+partitionM _ [] = return ([], [])
+partitionM p (x:xs) = do
+ r <- p x
+ (as, bs) <- partitionM p xs
+ return $ if r then (x:as, bs) else (as, x:bs)
+
{- Runs an action on values from a list until it succeeds. -}
untilTrue :: Monad m => [a] -> (a -> m Bool) -> m Bool
untilTrue = flip anyM