on master help sign in
Fix bug
commit12ce196e2907ba76435f4c7f7dee3a0a4fef6017 authorMatt Parsons <parsonsmatt@gmail.com> dateSun 11 Dec 2016, 15:08 (10 years ago) parent9fe9566
2 files changed+8−3
Data/Aeson/Encoding/Builder.hs+1−1 Data/Aeson/Parser/Time.hs+7−2
Data/Aeson/Encoding/Builder.hs+1−1
@@ -194,7 +194,7 @@ day dd = encodeYear yr <>
194194 encodeYear y
195195 | y >= 1000 = B.integerDec y
196196 | y >= 0 = BP.primBounded (ascii4 (padYear y)) ()
197− | y >= -999 = BP.primBounded (ascii5 ('-',padYear y)) ()
197+ | y >= -999 = BP.primBounded (ascii5 ('-',padYear (- y))) ()
198198 | otherwise = B.integerDec y
199199 padYear y =
200200 let (ab,c) = fromIntegral y `quotRem` 10
Data/Aeson/Parser/Time.hs+7−2
@@ -46,13 +46,18 @@ run p t = case A.parseOnly (p <* endOfInput) t of
4646 Left err -> fail $ "could not parse date: " ++ err
4747 Right r -> return r
4848
49−-- | Parse a date of the form @YYYY-MM-DD@.
49+-- | Parse a date of the form @[+,-]YYYY-MM-DD@.
5050day :: Parser Day
5151day = do
52+ absOrNeg <- choice
53+ [ char '-' *> pure negate
54+ , char '+' *> pure id
55+ , pure id
56+ ]
5257 y <- decimal <* char '-'
5358 m <- twoDigits <* char '-'
5459 d <- twoDigits
55− maybe (fail "invalid date") return (fromGregorianValid y m d)
60+ maybe (fail "invalid date") return (fromGregorianValid (absOrNeg y) m d)
5661
5762-- | Parse a two-digit integer (e.g. day of month, hour).
5863twoDigits :: Parser Int