lib: In quarterdatespanp, use yearp and allow uppercase Q.
This commit is contained in:
parent
22091dfd31
commit
08ad220448
@ -85,7 +85,7 @@ import Control.Applicative (liftA2)
|
|||||||
import Control.Applicative.Permutations
|
import Control.Applicative.Permutations
|
||||||
import Control.Monad (guard, unless)
|
import Control.Monad (guard, unless)
|
||||||
import "base-compat-batteries" Data.List.Compat
|
import "base-compat-batteries" Data.List.Compat
|
||||||
import Data.Char (isDigit)
|
import Data.Char (digitToInt, isDigit, ord)
|
||||||
import Data.Default
|
import Data.Default
|
||||||
import Data.Foldable (asum)
|
import Data.Foldable (asum)
|
||||||
import Data.Function (on)
|
import Data.Function (on)
|
||||||
@ -997,15 +997,17 @@ doubledatespanp rdate = liftA2 fromToSpan
|
|||||||
-- |
|
-- |
|
||||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "q1"
|
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "q1"
|
||||||
-- Right DateSpan 2018Q1
|
-- Right DateSpan 2018Q1
|
||||||
|
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "Q1"
|
||||||
|
-- Right DateSpan 2018Q1
|
||||||
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "2020q4"
|
-- >>> parsewith (quarterdatespanp (parsedate "2018/01/01") <* eof) "2020q4"
|
||||||
-- Right DateSpan 2020Q4
|
-- Right DateSpan 2020Q4
|
||||||
quarterdatespanp :: Day -> TextParser m DateSpan
|
quarterdatespanp :: Day -> TextParser m DateSpan
|
||||||
quarterdatespanp rdate = do
|
quarterdatespanp rdate = do
|
||||||
let defaultYear = first3 $ toGregorian rdate
|
y <- yearp <|> pure (first3 $ toGregorian rdate)
|
||||||
y <- maybe defaultYear read <$> optional (count 4 digitChar)
|
q <- char' 'q' *> satisfy is4Digit
|
||||||
char 'q'
|
return . periodAsDateSpan $ QuarterPeriod y (digitToInt q)
|
||||||
q <- oneOf ("1234"::[Char])
|
where
|
||||||
return $ periodAsDateSpan $ QuarterPeriod y $ read [q]
|
is4Digit c = (fromIntegral (ord c - ord '1') :: Word) <= 3
|
||||||
|
|
||||||
fromdatespanp :: Day -> TextParser m DateSpan
|
fromdatespanp :: Day -> TextParser m DateSpan
|
||||||
fromdatespanp rdate = fromSpan <$> choice
|
fromdatespanp rdate = fromSpan <$> choice
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user