From 42bc20ae074df4fbffb1f3fdd200456ef02c26ea Mon Sep 17 00:00:00 2001 From: vi Date: Sat, 23 Aug 2014 19:01:14 +0800 Subject: [PATCH] Safe implementation of adornSuffix. --- src/Data/Text/ICU/Extras.hs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/Data/Text/ICU/Extras.hs b/src/Data/Text/ICU/Extras.hs index 910dbdd..81e920c 100644 --- a/src/Data/Text/ICU/Extras.hs +++ b/src/Data/Text/ICU/Extras.hs @@ -53,12 +53,16 @@ parseReplacement :: Text -> Maybe Replacement parseReplacement = hush . parseOnly (many' parseSegment) runReplacement :: [Match] -> Replacement -> Maybe Text -runReplacement matches replacement = mconcat <$$> invert . adornSuffix (last matches) $ do +runReplacement matches replacement = mconcat <$$> invert . adornSuffix (safeLast matches) $ do match <- matches Just (span match) : map (dereference $ flip group match) replacement -adornSuffix :: Match -> ([Maybe Text] -> [Maybe Text]) -adornSuffix match = (++ [ap (flip suffix) groupCount match]) +safeLast :: [a] -> Maybe a +safeLast = \case { [] -> Nothing; xs -> Just $ last xs } + +adornSuffix :: Maybe Match -> ([Maybe Text] -> [Maybe Text]) +adornSuffix Nothing = id +adornSuffix (Just match) = (++ [ap (flip suffix) groupCount match]) dereference :: (Int -> Maybe Text) -> Segment -> Maybe Text dereference group = \case