diff options
Diffstat (limited to 'src/compiler/GF/Infra')
| -rw-r--r-- | src/compiler/GF/Infra/CheckM.hs | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/compiler/GF/Infra/CheckM.hs b/src/compiler/GF/Infra/CheckM.hs index 7a5ac2d45..c1198dea6 100644 --- a/src/compiler/GF/Infra/CheckM.hs +++ b/src/compiler/GF/Infra/CheckM.hs @@ -15,7 +15,7 @@ module GF.Infra.CheckM (Check(..), CheckResult(..), Message, runCheck, checkError, checkCond, checkWarn, - checkErr, checkIn, checkMap + checkErr, checkIn, checkMap, checkMapRecover ) where import GF.Data.Operations @@ -65,6 +65,13 @@ checkMap f map = do xs <- mapM (\(k,v) -> do v <- f k v return (k,v)) (Map.toList map) return (Map.fromAscList xs) +checkMapRecover :: (Ord a) => (a -> b -> Check b) -> Map.Map a b -> Check (Map.Map a b) +checkMapRecover f mp = do + let xs = map (\ (k,v) -> (k,runCheck (f k v))) (Map.toList mp) + case [s | (_,Bad s) <- xs] of + ss@(_:_) -> checkError (text (unlines ss)) + _ -> return (Map.fromAscList [(k,x) | (k, Ok (x,_)) <- xs]) + checkErr :: Err a -> Check a checkErr (Ok x) = return x checkErr (Bad err) = checkError (text err) |
