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