Skip to content

Commit 9b9bfa5

Browse files
committed
Add spanM
1 parent f2fd736 commit 9b9bfa5

File tree

1 file changed

+11
-0
lines changed

1 file changed

+11
-0
lines changed

src/Control/Monad/Loops.hs

+11
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,17 @@ dropWhileM p (x:xs) = do
385385
then dropWhileM p xs
386386
else return (x:xs)
387387

388+
-- | Monad 'span'.
389+
spanM :: (Monad m) => (a -> m Bool) -> [a] -> m ([a], [a])
390+
spanM _ [] = return []
391+
spanM p xs@(x:xs') = do
392+
q <- p x
393+
if q
394+
then do
395+
(ys, zs) <- spanM p xs'
396+
return (x:ys, zs)
397+
else return ([], xs)
398+
388399
-- |like 'dropWhileM' but trims both ends of the list.
389400
trimM :: (Monad m) => (a -> m Bool) -> [a] -> m [a]
390401
trimM p xs = do

0 commit comments

Comments
 (0)