From 3fb91e0f448aa4be317a112fdc95673fb99fa6f6 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 15 Jun 2004 13:55:54 +0000 Subject: improved make facility: remember state if fails; does not need source --- src/GF/Data/Operations.hs | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'src/GF/Data') diff --git a/src/GF/Data/Operations.hs b/src/GF/Data/Operations.hs index 9c374fe83..9bed80392 100644 --- a/src/GF/Data/Operations.hs +++ b/src/GF/Data/Operations.hs @@ -122,6 +122,15 @@ mapErrN maxN f xs = Ok (ys, unlines (errHdr : ss2)) nss = length ss fxs = map f xs +-- like foldM, but also return the latest value if fails + +foldErr :: (a -> b -> Err a) -> a -> [b] -> Err (a, Maybe String) +foldErr f s xs = case xs of + [] -> return (s,Nothing) + x:xx -> case f s x of + Ok v -> foldErr f v xx + Bad m -> return $ (s, Just m) + -- !! with the error monad (!?) :: [a] -> Int -> Err a xs !? i = foldr (const . return) (Bad "too few elements in list") $ drop i xs -- cgit v1.2.3