summaryrefslogtreecommitdiff
path: root/src/GF/Data/Operations.hs
diff options
context:
space:
mode:
authorpeb <unknown>2004-06-10 14:37:43 +0000
committerpeb <unknown>2004-06-10 14:37:43 +0000
commit652618742aa1dd10b1a53bb132a476a91f1dc3ba (patch)
tree602c1ab0e7f8ba9f1797e90a9a768c19e35d677a /src/GF/Data/Operations.hs
parent3522b2a3cd8d01ef1b908c1a717b0592332a5737 (diff)
*** empty log message ***
Diffstat (limited to 'src/GF/Data/Operations.hs')
-rw-r--r--src/GF/Data/Operations.hs11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/GF/Data/Operations.hs b/src/GF/Data/Operations.hs
index f348b768f..9c374fe83 100644
--- a/src/GF/Data/Operations.hs
+++ b/src/GF/Data/Operations.hs
@@ -111,6 +111,17 @@ mapErr f xs = Ok (ys, unlines ss)
(ys,ss) = ([y | Ok y <- fxs], [s | Bad s <- fxs])
fxs = map f xs
+-- alternative variant, peb 9/6-04
+mapErrN :: Int -> (a -> Err b) -> [a] -> Err ([b], String)
+mapErrN maxN f xs = Ok (ys, unlines (errHdr : ss2))
+ where
+ (ys, ss) = ([y | Ok y <- fxs], [s | Bad s <- fxs])
+ errHdr = show nss ++ " errors occured" ++
+ if nss > maxN then ", showing the first " ++ show maxN else ""
+ ss2 = map ("* "++) $ take maxN ss
+ nss = length ss
+ fxs = map f xs
+
-- !! with the error monad
(!?) :: [a] -> Int -> Err a
xs !? i = foldr (const . return) (Bad "too few elements in list") $ drop i xs