, assertWeekDayIsGood
, assertGregorianDateIsGood
, assertTimeOfDayIsGood
+
+ , optionMaybe
)
where
import Blaze.ByteString.Builder.ByteString as B
import Blaze.Text.Int as BT
import Control.Applicative
import Control.Monad
-import Control.Monad.Unicode
import Data.Ascii (AsciiBuilder)
import qualified Data.Ascii as A
import Data.Attoparsec.Char8 as P
shortWeekDayNameP ∷ Num n ⇒ Parser n
{-# INLINEABLE shortWeekDayNameP #-}
shortWeekDayNameP
- = choice [ string "Mon" ≫ return 1
+ = choice [ string "Mon" *> return 1
, char 'T'
- ≫ choice [ string "ue" ≫ return 2
- , string "hu" ≫ return 4
- ]
- , string "Wed" ≫ return 3
- , string "Fri" ≫ return 5
+ *> choice [ string "ue" *> return 2
+ , string "hu" *> return 4
+ ]
+ , string "Wed" *> return 3
+ , string "Fri" *> return 5
, char 'S'
- ≫ choice [ string "at" ≫ return 6
- , string "un" ≫ return 7
- ]
+ *> choice [ string "at" *> return 6
+ , string "un" *> return 7
+ ]
]
longWeekDayName ∷ Num n ⇒ n → String
longWeekDayNameP ∷ Num n ⇒ Parser n
{-# INLINEABLE longWeekDayNameP #-}
longWeekDayNameP
- = choice [ string "Monday" ≫ return 1
+ = choice [ string "Monday" *> return 1
, char 'T'
- ≫ choice [ string "uesday" ≫ return 2
- , string "hursday" ≫ return 4
- ]
- , string "Wednesday" ≫ return 3
- , string "Friday" ≫ return 5
+ *> choice [ string "uesday" *> return 2
+ , string "hursday" *> return 4
+ ]
+ , string "Wednesday" *> return 3
+ , string "Friday" *> return 5
, char 'S'
- ≫ choice [ string "aturday" ≫ return 6
- , string "unday" ≫ return 7
- ]
+ *> choice [ string "aturday" *> return 6
+ , string "unday" *> return 7
+ ]
]
shortMonthName ∷ Num n ⇒ n → String
{-# INLINEABLE shortMonthNameP #-}
shortMonthNameP
= choice [ char 'J'
- ≫ choice [ string "an" ≫ return 1
- , char 'u'
- ≫ choice [ char 'n' ≫ return 6
- , char 'l' ≫ return 7
- ]
- ]
- , string "Feb" ≫ return 2
+ *> choice [ string "an" *> return 1
+ , char 'u'
+ *> choice [ char 'n' *> return 6
+ , char 'l' *> return 7
+ ]
+ ]
+ , string "Feb" *> return 2
, string "Ma"
- ≫ choice [ char 'r' ≫ return 3
- , char 'y' ≫ return 5
- ]
+ *> choice [ char 'r' *> return 3
+ , char 'y' *> return 5
+ ]
, char 'A'
- ≫ choice [ string "pr" ≫ return 4
- , string "ug" ≫ return 8
- ]
- , string "Sep" ≫ return 9
- , string "Oct" ≫ return 10
- , string "Nov" ≫ return 11
- , string "Dec" ≫ return 12
+ *> choice [ string "pr" *> return 4
+ , string "ug" *> return 8
+ ]
+ , string "Sep" *> return 9
+ , string "Oct" *> return 10
+ , string "Nov" *> return 11
+ , string "Dec" *> return 12
]
longMonthName ∷ Num n ⇒ n → String
{-# INLINEABLE longMonthNameP #-}
longMonthNameP
= choice [ char 'J'
- ≫ choice [ string "anuary" ≫ return 1
- , char 'u'
- ≫ choice [ string "ne" ≫ return 6
- , string "ly" ≫ return 7
- ]
- ]
- , string "February" ≫ return 2
+ *> choice [ string "anuary" *> return 1
+ , char 'u'
+ *> choice [ string "ne" *> return 6
+ , string "ly" *> return 7
+ ]
+ ]
+ , string "February" *> return 2
, string "Ma"
- ≫ choice [ string "rch" ≫ return 3
- , char 'y' ≫ return 5
- ]
+ *> choice [ string "rch" *> return 3
+ , char 'y' *> return 5
+ ]
, char 'A'
- ≫ choice [ string "pril" ≫ return 4
- , string "ugust" ≫ return 8
- ]
- , string "September" ≫ return 9
- , string "October" ≫ return 10
- , string "November" ≫ return 11
- , string "December" ≫ return 12
+ *> choice [ string "pril" *> return 4
+ , string "ugust" *> return 8
+ ]
+ , string "September" *> return 9
+ , string "October" *> return 10
+ , string "November" *> return 11
+ , string "December" *> return 12
]
show4 ∷ Integral i ⇒ i → AsciiBuilder
read4digitsTZ ∷ Parser TimeZone
read4digitsTZ
- = do sign ← (char '+' ≫ return 1)
+ = do sign ← (char '+' *> return 1)
<|>
- (char '-' ≫ return (-1))
+ (char '-' *> return (-1))
hour ← read2
minute ← read2
let tz = TimeZone {
]
Just tod
→ return tod
+
+optionMaybe ∷ Alternative f ⇒ f a → f (Maybe a)
+{-# INLINE optionMaybe #-}
+optionMaybe p
+ = option Nothing (Just <$> p)