Implement findFirst in terms of foldr

This commit is contained in:
Joseph C. Sible 2020-04-05 15:21:44 -04:00
parent b0dbc79f69
commit b3c04ce3d0
1 changed files with 7 additions and 8 deletions

View File

@ -388,14 +388,13 @@ parents params = getPath (parentMap params)
-- Find the first match in a list where the predicate is Just True. -- Find the first match in a list where the predicate is Just True.
-- Stops if it's Just False and ignores Nothing. -- Stops if it's Just False and ignores Nothing.
findFirst :: (a -> Maybe Bool) -> [a] -> Maybe a findFirst :: (a -> Maybe Bool) -> [a] -> Maybe a
findFirst p l = findFirst p = foldr go Nothing
case l of where
[] -> Nothing go x acc =
(x:xs) -> case p x of
case p x of Just True -> return x
Just True -> return x Just False -> Nothing
Just False -> Nothing Nothing -> acc
Nothing -> findFirst p xs
-- Check whether a word is entirely output from a single command -- Check whether a word is entirely output from a single command
tokenIsJustCommandOutput t = case t of tokenIsJustCommandOutput t = case t of