{-# LANGUAGE CPP #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
#if __GLASGOW_HASKELL__ >= 810
{-# OPTIONS_GHC -Wno-unused-record-wildcards #-}
#endif
#include "thyme.h"
module Data.Thyme.Format
(
FormatTime (..)
, formatTime
, ParseTime (..)
, parseTime
, readTime
, readsTime
, TimeParse (..)
, timeParser
, TimeLocale (..)
, defaultTimeLocale
) where
import Prelude
import Control.Applicative
#if SHOW_INTERNAL
import Control.Arrow
#endif
import Control.Lens
import Control.Monad.Trans
import Control.Monad.State.Strict
import Data.Attoparsec.ByteString.Char8 (Parser)
import qualified Data.Attoparsec.ByteString.Char8 as P
import Data.Bits
import qualified Data.ByteString.Char8 as S
import Data.Char
import Data.Int
import Data.Thyme.Internal.Micro
import Data.Thyme.Calendar
import Data.Thyme.Calendar.Internal
import Data.Thyme.Clock.Internal
import Data.Thyme.Clock.POSIX
import Data.Thyme.Clock.TAI
import Data.Thyme.Format.Internal
import Data.Thyme.LocalTime
import Data.VectorSpace
#if MIN_VERSION_time(1,5,0)
import Data.Time.Format (TimeLocale (..), defaultTimeLocale)
#else
import System.Locale
#endif
class FormatTime t where
showsTime
:: TimeLocale
-> t
-> (Char -> ShowS)
-> Char
-> ShowS
{-# INLINEABLE formatTime #-}
formatTime :: (FormatTime t)
=> TimeLocale
-> String
-> t
-> String
formatTime :: forall t. FormatTime t => TimeLocale -> String -> t -> String
formatTime l :: TimeLocale
l@TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
knownTimeZones :: TimeLocale -> [TimeZone]
..} String
spec t
t = String -> String -> String
go String
spec String
"" where
format :: Char -> String -> String
format = TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l t
t (\ Char
c String
s -> Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: Char
c Char -> String -> String
forall a. a -> [a] -> [a]
: String
s)
go :: String -> String -> String
go String
s = case String
s of
Char
'%' : Char
c : String
rest -> case Char
c of
Char
'c' -> String -> String -> String
go (String
dateTimeFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rest)
Char
'r' -> String -> String -> String
go (String
time12Fmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rest)
Char
'X' -> String -> String -> String
go (String
timeFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rest)
Char
'x' -> String -> String -> String
go (String
dateFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rest)
Char
'-' -> String -> String -> String
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rest)
Char
'_' -> String -> String -> String
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rest)
Char
'0' -> String -> String -> String
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rest)
Char
'^' -> String -> String -> String
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rest)
Char
'#' -> String -> String -> String
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rest)
Char
'%' -> (:) Char
'%' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
go String
rest
Char
_ -> Char -> String -> String
format Char
c (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
go String
rest
Char
c : String
rest -> (:) Char
c (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
go String
rest
[] -> String -> String
forall a. a -> a
id
{-# INLINE showsY #-}
showsY :: Year -> ShowS
#if BUG_FOR_BUG
showsY :: Int -> String -> String
showsY = Int -> String -> String
forall a. Show a => a -> String -> String
shows
#else
showsY = showsYear
#endif
instance FormatTime TimeOfDay where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> TimeOfDay
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale{String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (TimeOfDay Int
h Int
m (DiffTime Micro
s)) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'R' -> Int -> String -> String
shows02 Int
h (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
m
Char
'T' -> Int -> String -> String
shows02 Int
h (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
m (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
si
Char
'P' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String) -> String -> String -> String
forall a b. (a -> b) -> a -> b
$ Char -> Char
toLower (Char -> Char) -> String -> String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> if Int
h Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
12 then (String, String) -> String
forall a b. (a, b) -> a
fst (String, String)
amPm else (String, String) -> String
forall a b. (a, b) -> b
snd (String, String)
amPm
Char
'p' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String) -> String -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
h Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
12 then (String, String) -> String
forall a b. (a, b) -> a
fst (String, String)
amPm else (String, String) -> String
forall a b. (a, b) -> b
snd (String, String)
amPm
Char
'H' -> Int -> String -> String
shows02 Int
h
Char
'I' -> Int -> String -> String
shows02 (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod (Int
h Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int
12
Char
'k' -> Int -> String -> String
shows_2 Int
h
Char
'l' -> Int -> String -> String
shows_2 (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod (Int
h Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int
12
Char
'M' -> Int -> String -> String
shows02 Int
m
Char
'S' -> Int -> String -> String
shows02 Int
si
Char
'q' -> Int64 -> String -> String
fills06 Int64
su (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> String -> String
forall a. Show a => a -> String -> String
shows Int64
su (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String -> String
forall a. [a] -> [a] -> [a]
(++) String
"000000"
Char
'v' -> Int64 -> String -> String
fills06 Int64
su (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> String -> String
forall a. Show a => a -> String -> String
shows Int64
su
Char
'Q' -> if Int64
su Int64 -> Int64 -> Bool
forall a. Eq a => a -> a -> Bool
== Int64
0 then String -> String
forall a. a -> a
id else (:) Char
'.' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> String -> String
fills06 Int64
su (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int64 -> String -> String
drops0 Int64
su
Char
_ -> Char -> String -> String
def Char
c
where (Int64 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
si, Micro Int64
su) = Micro -> Micro -> (Int64, Micro)
microQuotRem Micro
s (Int64 -> Micro
Micro Int64
1000000)
instance FormatTime YearMonthDay where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> YearMonthDay
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (YearMonthDay Int
y Int
m Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'D' -> Int -> String -> String
shows02 Int
m (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'/' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
d (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'/' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'F' -> Int -> String -> String
showsY Int
y (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'-' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
m (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'-' (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> String -> String
shows02 Int
d
Char
'Y' -> Int -> String -> String
showsY Int
y
Char
'y' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'B' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'b' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'h' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'm' -> Int -> String -> String
shows02 Int
m
Char
'd' -> Int -> String -> String
shows02 Int
d
Char
'e' -> Int -> String -> String
shows_2 Int
d
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime MonthDay where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> MonthDay
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (MonthDay Int
m Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'B' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'b' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'h' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
months [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'm' -> Int -> String -> String
shows02 Int
m
Char
'd' -> Int -> String -> String
shows02 Int
d
Char
'e' -> Int -> String -> String
shows_2 Int
d
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime OrdinalDate where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> OrdinalDate
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (OrdinalDate Int
y Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'Y' -> Int -> String -> String
showsY Int
y
Char
'y' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'j' -> Int -> String -> String
shows03 Int
d
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime WeekDate where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> WeekDate
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (WeekDate Int
y Int
w Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'G' -> Int -> String -> String
showsY Int
y
Char
'g' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'f' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'V' -> Int -> String -> String
shows02 Int
w
Char
'u' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else Int
d
Char
'w' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 then Int
0 else Int
d
Char
'A' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime SundayWeek where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> SundayWeek
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (SundayWeek Int
y Int
w Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'Y' -> Int -> String -> String
showsY Int
y
Char
'y' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'U' -> Int -> String -> String
shows02 Int
w
Char
'u' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else Int
d
Char
'w' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 then Int
0 else Int
d
Char
'A' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime MondayWeek where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> MondayWeek
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} (MondayWeek Int
y Int
w Int
d) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'Y' -> Int -> String -> String
showsY Int
y
Char
'y' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> String -> String
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'W' -> Int -> String -> String
shows02 Int
w
Char
'u' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else Int
d
Char
'w' -> Int -> String -> String
forall a. Show a => a -> String -> String
shows (Int -> String -> String) -> Int -> String -> String
forall a b. (a -> b) -> a -> b
$ if Int
d Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 then Int
0 else Int
d
Char
'A' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (String -> String -> String)
-> ((String, String) -> String)
-> (String, String)
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String -> String)
-> (String, String) -> String -> String
forall a b. (a -> b) -> a -> b
$ [(String, String)]
wDays [(String, String)] -> Int -> (String, String)
forall a. HasCallStack => [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime LocalTime where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> LocalTime
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
l (LocalTime Day
day TimeOfDay
tod) = TimeLocale
-> Day -> (Char -> String -> String) -> Char -> String -> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l Day
day ((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> TimeOfDay
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l TimeOfDay
tod
instance FormatTime Day where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> Day -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l d :: Day
d@(Getting OrdinalDate Day OrdinalDate -> Day -> OrdinalDate
forall a s. Getting a s a -> s -> a
view Getting OrdinalDate Day OrdinalDate
Iso' Day OrdinalDate
ordinalDate -> OrdinalDate
ordinal)
= TimeLocale
-> OrdinalDate
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l OrdinalDate
ordinal
((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> YearMonthDay
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (OrdinalDate
ordinal OrdinalDate
-> Getting YearMonthDay OrdinalDate YearMonthDay -> YearMonthDay
forall s a. s -> Getting a s a -> a
^. Getting YearMonthDay OrdinalDate YearMonthDay
Iso' OrdinalDate YearMonthDay
yearMonthDay)
((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> WeekDate
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (OrdinalDate -> Day -> WeekDate
toWeekOrdinal OrdinalDate
ordinal Day
d)
((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> SundayWeek
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (OrdinalDate -> Day -> SundayWeek
toSundayOrdinal OrdinalDate
ordinal Day
d)
((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> MondayWeek
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (OrdinalDate -> Day -> MondayWeek
toMondayOrdinal OrdinalDate
ordinal Day
d)
instance FormatTime TimeZone where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> TimeZone
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
_ tz :: TimeZone
tz@(TimeZone Int
_ Bool
_ String
name) = \ Char -> String -> String
def Char
c -> case Char
c of
Char
'z' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (TimeZone -> String
timeZoneOffsetString TimeZone
tz)
Char
'N' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (TimeZone -> String
timeZoneOffsetStringColon TimeZone
tz)
Char
'Z' -> String -> String -> String
forall a. [a] -> [a] -> [a]
(++) (if String -> Bool
forall a. [a] -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
name then TimeZone -> String
timeZoneOffsetString TimeZone
tz else String
name)
Char
_ -> Char -> String -> String
def Char
c
instance FormatTime ZonedTime where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
l (ZonedTime LocalTime
lt TimeZone
tz) = TimeLocale
-> LocalTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l LocalTime
lt ((Char -> String -> String) -> Char -> String -> String)
-> ((Char -> String -> String) -> Char -> String -> String)
-> (Char -> String -> String)
-> Char
-> String
-> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeLocale
-> TimeZone
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l TimeZone
tz
instance FormatTime UTCTime where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> UTCTime
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
l UTCTime
t = \ Char -> String -> String
def Char
c -> case Char
c of
Char
's' -> Int64 -> String -> String
forall a. Show a => a -> String -> String
shows (Int64 -> String -> String)
-> ((Int64, Micro) -> Int64) -> (Int64, Micro) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int64, Micro) -> Int64
forall a b. (a, b) -> a
fst ((Int64, Micro) -> String -> String)
-> (Int64, Micro) -> String -> String
forall a b. (a -> b) -> a -> b
$ Micro -> Micro -> (Int64, Micro)
qr Micro
s (Int64 -> Micro
Micro Int64
1000000)
Char
_ -> TimeLocale
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l ((TimeZone
utc, UTCTime
t) (TimeZone, UTCTime)
-> Getting ZonedTime (TimeZone, UTCTime) ZonedTime -> ZonedTime
forall s a. s -> Getting a s a -> a
^. Getting ZonedTime (TimeZone, UTCTime) ZonedTime
Iso' (TimeZone, UTCTime) ZonedTime
zonedTime) Char -> String -> String
def Char
c
where
NominalDiffTime Micro
s = UTCTime
t UTCTime -> Getting POSIXTime UTCTime POSIXTime -> POSIXTime
forall s a. s -> Getting a s a -> a
^. Getting POSIXTime UTCTime POSIXTime
Iso' UTCTime POSIXTime
posixTime
#if BUG_FOR_BUG
qr :: Micro -> Micro -> (Int64, Micro)
qr = Micro -> Micro -> (Int64, Micro)
microDivMod
#else
qr = microQuotRem
#endif
instance FormatTime UniversalTime where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> UniversalTime
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
l UniversalTime
t = TimeLocale
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (ZonedTime
-> (Char -> String -> String) -> Char -> String -> String)
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall a b. (a -> b) -> a -> b
$ LocalTime -> TimeZone -> ZonedTime
ZonedTime LocalTime
lt TimeZone
utc {timeZoneName = "UT1"} where
lt :: LocalTime
lt = UniversalTime
t UniversalTime
-> Getting LocalTime UniversalTime LocalTime -> LocalTime
forall s a. s -> Getting a s a -> a
^. Rational -> Iso' UniversalTime LocalTime
ut1LocalTime Rational
0
instance FormatTime AbsoluteTime where
{-# INLINEABLE showsTime #-}
showsTime :: TimeLocale
-> AbsoluteTime
-> (Char -> String -> String)
-> Char
-> String
-> String
showsTime TimeLocale
l AbsoluteTime
t = TimeLocale
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall t.
FormatTime t =>
TimeLocale
-> t -> (Char -> String -> String) -> Char -> String -> String
showsTime TimeLocale
l (ZonedTime
-> (Char -> String -> String) -> Char -> String -> String)
-> ZonedTime
-> (Char -> String -> String)
-> Char
-> String
-> String
forall a b. (a -> b) -> a -> b
$ LocalTime -> TimeZone -> ZonedTime
ZonedTime LocalTime
lt TimeZone
utc {timeZoneName = "TAI"} where
lt :: LocalTime
lt = AbsoluteTime
t AbsoluteTime
-> Getting LocalTime AbsoluteTime LocalTime -> LocalTime
forall s a. s -> Getting a s a -> a
^. AnIso UTCTime UTCTime AbsoluteTime AbsoluteTime
-> Iso AbsoluteTime AbsoluteTime UTCTime UTCTime
forall s t a b. AnIso s t a b -> Iso b a t s
from (TAIUTCMap -> Iso' UTCTime AbsoluteTime
absoluteTime TAIUTCMap
tum) Overloaded
(->) (Const LocalTime) AbsoluteTime AbsoluteTime UTCTime UTCTime
-> ((LocalTime -> Const LocalTime LocalTime)
-> UTCTime -> Const LocalTime UTCTime)
-> Getting LocalTime AbsoluteTime LocalTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeZone -> Iso' UTCTime LocalTime
utcLocalTime TimeZone
utc
tum :: TAIUTCMap
tum = Map UTCTime TAIUTCRow -> Map AbsoluteTime TAIUTCRow -> TAIUTCMap
TAIUTCMap Map UTCTime TAIUTCRow
forall a. Monoid a => a
mempty Map AbsoluteTime TAIUTCRow
forall a. Monoid a => a
mempty
data TimeFlag
= PostMeridiem
| TwelveHour
| HasCentury
| IsPOSIXTime
| IsOrdinalDate
| IsGregorian
| IsWeekDate
| IsSundayWeek
| IsMondayWeek
deriving (Int -> TimeFlag
TimeFlag -> Int
TimeFlag -> [TimeFlag]
TimeFlag -> TimeFlag
TimeFlag -> TimeFlag -> [TimeFlag]
TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag]
(TimeFlag -> TimeFlag)
-> (TimeFlag -> TimeFlag)
-> (Int -> TimeFlag)
-> (TimeFlag -> Int)
-> (TimeFlag -> [TimeFlag])
-> (TimeFlag -> TimeFlag -> [TimeFlag])
-> (TimeFlag -> TimeFlag -> [TimeFlag])
-> (TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag])
-> Enum TimeFlag
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: TimeFlag -> TimeFlag
succ :: TimeFlag -> TimeFlag
$cpred :: TimeFlag -> TimeFlag
pred :: TimeFlag -> TimeFlag
$ctoEnum :: Int -> TimeFlag
toEnum :: Int -> TimeFlag
$cfromEnum :: TimeFlag -> Int
fromEnum :: TimeFlag -> Int
$cenumFrom :: TimeFlag -> [TimeFlag]
enumFrom :: TimeFlag -> [TimeFlag]
$cenumFromThen :: TimeFlag -> TimeFlag -> [TimeFlag]
enumFromThen :: TimeFlag -> TimeFlag -> [TimeFlag]
$cenumFromTo :: TimeFlag -> TimeFlag -> [TimeFlag]
enumFromTo :: TimeFlag -> TimeFlag -> [TimeFlag]
$cenumFromThenTo :: TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag]
enumFromThenTo :: TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag]
Enum, Int -> TimeFlag -> String -> String
[TimeFlag] -> String -> String
TimeFlag -> String
(Int -> TimeFlag -> String -> String)
-> (TimeFlag -> String)
-> ([TimeFlag] -> String -> String)
-> Show TimeFlag
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> TimeFlag -> String -> String
showsPrec :: Int -> TimeFlag -> String -> String
$cshow :: TimeFlag -> String
show :: TimeFlag -> String
$cshowList :: [TimeFlag] -> String -> String
showList :: [TimeFlag] -> String -> String
Show)
data TimeParse = TimeParse
{ TimeParse -> Int
tpCentury :: {-# UNPACK #-}!Int
, TimeParse -> Int
tpCenturyYear :: {-# UNPACK #-}!Int
, TimeParse -> Int
tpMonth :: {-# UNPACK #-}!Month
, TimeParse -> Int
tpWeekOfYear :: {-# UNPACK #-}!WeekOfYear
, TimeParse -> Int
tpDayOfMonth :: {-# UNPACK #-}!DayOfMonth
, TimeParse -> Int
tpDayOfYear :: {-# UNPACK #-}!DayOfYear
, TimeParse -> Int
tpDayOfWeek :: {-# UNPACK #-}!DayOfWeek
, TimeParse -> Int
tpFlags :: {-# UNPACK #-}!Int
, TimeParse -> Int
tpHour :: {-# UNPACK #-}!Hour
, TimeParse -> Int
tpMinute :: {-# UNPACK #-}!Minute
, TimeParse -> Int
tpSecond :: {-# UNPACK #-}!Int
, TimeParse -> DiffTime
tpSecFrac :: {-# UNPACK #-}!DiffTime
, TimeParse -> POSIXTime
tpPOSIXTime :: {-# UNPACK #-}!POSIXTime
, TimeParse -> TimeZone
tpTimeZone :: !TimeZone
} deriving (Int -> TimeParse -> String -> String
[TimeParse] -> String -> String
TimeParse -> String
(Int -> TimeParse -> String -> String)
-> (TimeParse -> String)
-> ([TimeParse] -> String -> String)
-> Show TimeParse
forall a.
(Int -> a -> String -> String)
-> (a -> String) -> ([a] -> String -> String) -> Show a
$cshowsPrec :: Int -> TimeParse -> String -> String
showsPrec :: Int -> TimeParse -> String -> String
$cshow :: TimeParse -> String
show :: TimeParse -> String
$cshowList :: [TimeParse] -> String -> String
showList :: [TimeParse] -> String -> String
Show)
LENS(TimeParse,tpCentury,Int)
LENS(TimeParse,tpCenturyYear,Int)
LENS(TimeParse,tpMonth,Month)
LENS(TimeParse,tpWeekOfYear,WeekOfYear)
LENS(TimeParse,tpDayOfMonth,DayOfMonth)
LENS(TimeParse,tpDayOfWeek,DayOfWeek)
LENS(TimeParse,tpDayOfYear,DayOfYear)
LENS(TimeParse,tpFlags,Int)
LENS(TimeParse,tpHour,Hour)
LENS(TimeParse,tpMinute,Minute)
LENS(TimeParse,tpSecond,Int)
LENS(TimeParse,tpSecFrac,DiffTime)
LENS(TimeParse,tpPOSIXTime,POSIXTime)
LENS(TimeParse,tpTimeZone,TimeZone)
{-# INLINE flag #-}
flag :: TimeFlag -> Lens' TimeParse Bool
flag :: TimeFlag -> Lens' TimeParse Bool
flag (TimeFlag -> Int
forall a. Enum a => a -> Int
fromEnum -> Int
f) = Overloaded (->) f TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpFlags Overloaded (->) f TimeParse TimeParse Int Int
-> ((Bool -> f Bool) -> Int -> f Int)
-> (Bool -> f Bool)
-> TimeParse -> f TimeParse
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Bool) -> (Int -> Bool -> Int) -> Lens Int Int Bool Bool
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens
(Int -> Int -> Bool
forall a. Bits a => a -> Int -> Bool
`testBit` Int
f) (\ Int
n Bool
b -> (if Bool
b then Int -> Int -> Int
forall a. Bits a => a -> Int -> a
setBit else Int -> Int -> Int
forall a. Bits a => a -> Int -> a
clearBit) Int
n Int
f)
{-# INLINEABLE timeParser #-}
timeParser
:: TimeLocale
-> String
-> Parser TimeParse
timeParser :: TimeLocale -> String -> Parser TimeParse
timeParser TimeLocale {String
[(String, String)]
[TimeZone]
(String, String)
dateTimeFmt :: TimeLocale -> String
timeFmt :: TimeLocale -> String
time12Fmt :: TimeLocale -> String
amPm :: TimeLocale -> (String, String)
dateFmt :: TimeLocale -> String
months :: TimeLocale -> [(String, String)]
wDays :: TimeLocale -> [(String, String)]
knownTimeZones :: TimeLocale -> [TimeZone]
wDays :: [(String, String)]
months :: [(String, String)]
amPm :: (String, String)
dateTimeFmt :: String
dateFmt :: String
timeFmt :: String
time12Fmt :: String
knownTimeZones :: [TimeZone]
..} = (StateT TimeParse (Parser ByteString) ()
-> TimeParse -> Parser TimeParse)
-> TimeParse
-> StateT TimeParse (Parser ByteString) ()
-> Parser TimeParse
forall a b c. (a -> b -> c) -> b -> a -> c
flip StateT TimeParse (Parser ByteString) ()
-> TimeParse -> Parser TimeParse
forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m s
execStateT TimeParse
unixEpoch (StateT TimeParse (Parser ByteString) () -> Parser TimeParse)
-> (String -> StateT TimeParse (Parser ByteString) ())
-> String
-> Parser TimeParse
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> StateT TimeParse (Parser ByteString) ()
go where
go :: String -> StateT TimeParse Parser ()
go :: String -> StateT TimeParse (Parser ByteString) ()
go String
spec = case String
spec of
Char
'%' : Char
cspec : String
rspec -> case Char
cspec of
Char
'c' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
dateTimeFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'r' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
time12Fmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'X' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
timeFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'x' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
dateFmt String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'R' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
"%H:%M" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'T' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
"%H:%M:%S" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'D' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
"%m/%d/%y" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'F' -> String -> StateT TimeParse (Parser ByteString) ()
go (String
"%Y-%m-%d" String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
rspec)
Char
'P' -> StateT TimeParse (Parser ByteString) ()
dayHalf
Char
'p' -> StateT TimeParse (Parser ByteString) ()
dayHalf
Char
'H' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour24
Char
'I' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour12
Char
'k' -> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour24)
StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour24)
Char
'l' -> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour12)
StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setHour12)
Char
'M' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpMinute StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'S' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpSecond StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'q' -> Parser Micro -> StateT TimeParse (Parser ByteString) Micro
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser Micro
micro StateT TimeParse (Parser ByteString) Micro
-> (Micro -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse DiffTime DiffTime
-> DiffTime -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse DiffTime DiffTime
Lens' TimeParse DiffTime
_tpSecFrac (DiffTime -> StateT TimeParse (Parser ByteString) ())
-> (Micro -> DiffTime)
-> Micro
-> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micro -> DiffTime
DiffTime StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'v' -> Parser Micro -> StateT TimeParse (Parser ByteString) Micro
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser Micro
micro StateT TimeParse (Parser ByteString) Micro
-> (Micro -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse DiffTime DiffTime
-> DiffTime -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse DiffTime DiffTime
Lens' TimeParse DiffTime
_tpSecFrac (DiffTime -> StateT TimeParse (Parser ByteString) ())
-> (Micro -> DiffTime)
-> Micro
-> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micro -> DiffTime
DiffTime StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'Q' -> Parser DiffTime -> StateT TimeParse (Parser ByteString) DiffTime
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ((Char -> Parser Char
P.char Char
'.' Parser Char -> Parser DiffTime -> Parser DiffTime
forall a b. Parser a -> Parser b -> Parser b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Micro -> DiffTime
DiffTime (Micro -> DiffTime) -> Parser Micro -> Parser DiffTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Micro
micro) Parser DiffTime -> Parser DiffTime -> Parser DiffTime
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> DiffTime -> Parser DiffTime
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return DiffTime
forall v. AdditiveGroup v => v
zeroV)
StateT TimeParse (Parser ByteString) DiffTime
-> (DiffTime -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse DiffTime DiffTime
-> DiffTime -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse DiffTime DiffTime
Lens' TimeParse DiffTime
_tpSecFrac StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'Y' -> StateT TimeParse (Parser ByteString) ()
fullYear
Char
'y' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setCenturyYear
Char
'C' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setCentury
Char
'B' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([String] -> Parser Int
indexOfCI ([String] -> Parser Int) -> [String] -> Parser Int
forall a b. (a -> b) -> a -> b
$ (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, String)]
months) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setMonth (Int -> StateT TimeParse (Parser ByteString) ())
-> (Int -> Int) -> Int -> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int
forall a. Enum a => a -> a
succ
Char
'b' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([String] -> Parser Int
indexOfCI ([String] -> Parser Int) -> [String] -> Parser Int
forall a b. (a -> b) -> a -> b
$ (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, String)]
months) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setMonth (Int -> StateT TimeParse (Parser ByteString) ())
-> (Int -> Int) -> Int -> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int
forall a. Enum a => a -> a
succ
Char
'h' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([String] -> Parser Int
indexOfCI ([String] -> Parser Int) -> [String] -> Parser Int
forall a b. (a -> b) -> a -> b
$ (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, String)]
months) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setMonth (Int -> StateT TimeParse (Parser ByteString) ())
-> (Int -> Int) -> Int -> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int
forall a. Enum a => a -> a
succ
Char
'm' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setMonth
Char
'd' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfMonth
Char
'e' -> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfMonth)
StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfMonth)
Char
'j' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
3) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpDayOfYear
StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsOrdinalDate Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'G' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> StateT TimeParse (Parser ByteString) ()
fullYear
Char
'g' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) Int
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setCenturyYear
Char
'f' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) Int
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setCentury
Char
'V' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) Int
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setWeekOfYear
Char
'U' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsSundayWeek Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) Int
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setWeekOfYear
Char
'W' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsMondayWeek Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) Int
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setWeekOfYear
Char
'w' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
1) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfWeek
Char
'u' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
1) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfWeek
Char
'A' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([String] -> Parser Int
indexOfCI ([String] -> Parser Int) -> [String] -> Parser Int
forall a b. (a -> b) -> a -> b
$ (String, String) -> String
forall a b. (a, b) -> a
fst ((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, String)]
wDays) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfWeek
Char
'a' -> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([String] -> Parser Int
indexOfCI ([String] -> Parser Int) -> [String] -> Parser Int
forall a b. (a -> b) -> a -> b
$ (String, String) -> String
forall a b. (a, b) -> b
snd ((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [(String, String)]
wDays) StateT TimeParse (Parser ByteString) Int
-> (Int -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse (Parser ByteString) ()
setDayOfWeek
Char
'z' -> do StateT TimeParse (Parser ByteString) ()
tzOffset; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'N' -> do StateT TimeParse (Parser ByteString) ()
tzOffset; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'Z' -> do StateT TimeParse (Parser ByteString) ()
tzOffset StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> StateT TimeParse (Parser ByteString) ()
tzName; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
's' -> do
Int64
s <- Parser Int64 -> StateT TimeParse (Parser ByteString) Int64
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser Int64 -> Parser Int64
forall n. Integral n => Parser n -> Parser n
negative Parser Int64
forall a. Integral a => Parser a
P.decimal)
Overloaded (->) Identity TimeParse TimeParse POSIXTime POSIXTime
Lens' TimeParse POSIXTime
_tpPOSIXTime Overloaded (->) Identity TimeParse TimeParse POSIXTime POSIXTime
-> POSIXTime -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int64 -> POSIXTime
forall n t. (Real n, TimeDiff t) => n -> t
fromSeconds (Int64
s :: Int64)
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsPOSIXTime Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
'-' -> String -> StateT TimeParse (Parser ByteString) ()
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rspec)
Char
'_' -> String -> StateT TimeParse (Parser ByteString) ()
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rspec)
Char
'0' -> String -> StateT TimeParse (Parser ByteString) ()
go (Char
'%' Char -> String -> String
forall a. a -> [a] -> [a]
: String
rspec)
Char
'%' -> Parser Char -> StateT TimeParse (Parser ByteString) Char
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser Char
P.char Char
'%') StateT TimeParse (Parser ByteString) Char
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
_ -> Parser () -> StateT TimeParse (Parser ByteString) ()
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser () -> StateT TimeParse (Parser ByteString) ())
-> (String -> Parser ())
-> String
-> StateT TimeParse (Parser ByteString) ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Parser ()
forall a. String -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail (String -> StateT TimeParse (Parser ByteString) ())
-> String -> StateT TimeParse (Parser ByteString) ()
forall a b. (a -> b) -> a -> b
$ String
"Unknown format character: " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Char -> String
forall a. Show a => a -> String
show Char
cspec
where
dayHalf :: StateT TimeParse (Parser ByteString) ()
dayHalf = do
Bool
pm <- Parser ByteString Bool -> StateT TimeParse (Parser ByteString) Bool
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser ByteString Bool
-> StateT TimeParse (Parser ByteString) Bool)
-> Parser ByteString Bool
-> StateT TimeParse (Parser ByteString) Bool
forall a b. (a -> b) -> a -> b
$ Bool
False Bool -> Parser () -> Parser ByteString Bool
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ String -> Parser ()
stringCI ((String, String) -> String
forall a b. (a, b) -> a
fst (String, String)
amPm)
Parser ByteString Bool
-> Parser ByteString Bool -> Parser ByteString Bool
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
True Bool -> Parser () -> Parser ByteString Bool
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ String -> Parser ()
stringCI ((String, String) -> String
forall a b. (a, b) -> b
snd (String, String)
amPm)
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
PostMeridiem Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
pm
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
fullYear :: StateT TimeParse (Parser ByteString) ()
fullYear = Parser Int -> StateT TimeParse (Parser ByteString) ()
year (Parser Int -> Parser Int
forall n. Integral n => Parser n -> Parser n
negative Parser Int
forall a. Integral a => Parser a
P.decimal) StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Int -> StateT TimeParse (Parser ByteString) ()
year (Int -> Parser Int
dec0 Int
4) where
year :: Parser Int -> StateT TimeParse (Parser ByteString) ()
year Parser Int
p = do
(Int
c, Int
y) <- (Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`divMod` Int
100) (Int -> (Int, Int))
-> StateT TimeParse (Parser ByteString) Int
-> StateT TimeParse (Parser ByteString) (Int, Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser Int
p
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
HasCentury Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpCentury Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
c
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpCenturyYear Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
y
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setHour12 :: Int -> StateT TimeParse (Parser ByteString) ()
setHour12 Int
h = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpHour Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
h
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setHour24 :: Int -> StateT TimeParse (Parser ByteString) ()
setHour24 Int
h = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
False
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpHour Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
h
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setCenturyYear :: Int -> StateT TimeParse (Parser ByteString) ()
setCenturyYear Int
y = do Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpCenturyYear Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
y; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setCentury :: Int -> StateT TimeParse (Parser ByteString) ()
setCentury Int
c = do
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpCentury Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
c
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
HasCentury Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setMonth :: Int -> StateT TimeParse (Parser ByteString) ()
setMonth Int
m = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsGregorian Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpMonth Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
m
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setDayOfMonth :: Int -> StateT TimeParse (Parser ByteString) ()
setDayOfMonth Int
d = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsGregorian Overloaded (->) Identity TimeParse TimeParse Bool Bool
-> Bool -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Bool
True
Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpDayOfMonth Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
d
String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setWeekOfYear :: Int -> StateT TimeParse (Parser ByteString) ()
setWeekOfYear Int
w = do Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpWeekOfYear Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
w; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
setDayOfWeek :: Int -> StateT TimeParse (Parser ByteString) ()
setDayOfWeek Int
d = do Setter TimeParse TimeParse Int Int
Lens' TimeParse Int
_tpDayOfWeek Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int
d; String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
tzOffset :: StateT TimeParse (Parser ByteString) ()
tzOffset = do
Int -> Int
s <- Parser ByteString (Int -> Int)
-> StateT TimeParse (Parser ByteString) (Int -> Int)
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Int
forall a. a -> a
id (Int -> Int) -> Parser Char -> Parser ByteString (Int -> Int)
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> Parser Char
P.char Char
'+' Parser ByteString (Int -> Int)
-> Parser ByteString (Int -> Int) -> Parser ByteString (Int -> Int)
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Int
forall a. Num a => a -> a
negate (Int -> Int) -> Parser Char -> Parser ByteString (Int -> Int)
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> Parser Char
P.char Char
'-')
Int
h <- Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2)
() ()
-> StateT TimeParse (Parser ByteString) Char
-> StateT TimeParse (Parser ByteString) ()
forall a b.
a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser Char -> StateT TimeParse (Parser ByteString) Char
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser Char
P.char Char
':') StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () -> StateT TimeParse (Parser ByteString) ()
forall a. a -> StateT TimeParse (Parser ByteString) a
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
Int
m <- Parser Int -> StateT TimeParse (Parser ByteString) Int
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2)
Overloaded (->) Identity TimeParse TimeParse TimeZone TimeZone
Lens' TimeParse TimeZone
_tpTimeZone Overloaded (->) Identity TimeParse TimeParse TimeZone TimeZone
-> ((Int -> Identity Int) -> TimeZone -> Identity TimeZone)
-> Setter TimeParse TimeParse Int Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Identity Int) -> TimeZone -> Identity TimeZone
Lens' TimeZone Int
_timeZoneMinutes Setter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
.= Int -> Int
s (Int
h Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
60 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
m)
tzName :: StateT TimeParse (Parser ByteString) ()
tzName = Parser ByteString TimeZone
-> StateT TimeParse (Parser ByteString) TimeZone
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser ByteString TimeZone
timeZoneParser StateT TimeParse (Parser ByteString) TimeZone
-> (TimeZone -> StateT TimeParse (Parser ByteString) ())
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> (a -> StateT TimeParse (Parser ByteString) b)
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Overloaded (->) Identity TimeParse TimeParse TimeZone TimeZone
-> TimeZone -> StateT TimeParse (Parser ByteString) ()
forall s (m :: * -> *) a b.
MonadState s m =>
Setter s s a b -> b -> m ()
assign Overloaded (->) Identity TimeParse TimeParse TimeZone TimeZone
Lens' TimeParse TimeZone
_tpTimeZone
Char
c : String
rspec | Char -> Bool
P.isSpace Char
c ->
Parser ByteString
-> StateT TimeParse (Parser ByteString) ByteString
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ((Char -> Bool) -> Parser ByteString
P.takeWhile Char -> Bool
P.isSpace) StateT TimeParse (Parser ByteString) ByteString
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go ((Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
P.isSpace String
rspec)
Char
c : String
rspec | Char -> Bool
isAscii Char
c -> Parser Char -> StateT TimeParse (Parser ByteString) Char
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser Char
P.char Char
c) StateT TimeParse (Parser ByteString) Char
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
Char
c : String
rspec -> Parser () -> StateT TimeParse (Parser ByteString) ()
forall (m :: * -> *) a. Monad m => m a -> StateT TimeParse m a
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser ()
charU8 Char
c) StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
-> StateT TimeParse (Parser ByteString) ()
forall a b.
StateT TimeParse (Parser ByteString) a
-> StateT TimeParse (Parser ByteString) b
-> StateT TimeParse (Parser ByteString) b
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> StateT TimeParse (Parser ByteString) ()
go String
rspec
String
"" -> () -> StateT TimeParse (Parser ByteString) ()
forall a. a -> StateT TimeParse (Parser ByteString) a
forall (m :: * -> *) a. Monad m => a -> m a
return ()
{-# INLINE micro #-}
micro :: Parser Micro
micro :: Parser Micro
micro = do
Int64
us10 <- (String -> Parser Int64)
-> (Int64 -> Parser Int64) -> Either String Int64 -> Parser Int64
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> Parser Int64
forall a. String -> Parser ByteString a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail Int64 -> Parser Int64
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Either String Int64 -> Parser Int64)
-> (ByteString -> Either String Int64)
-> ByteString
-> Parser Int64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Int64 -> ByteString -> Either String Int64
forall a. Parser a -> ByteString -> Either String a
P.parseOnly Parser Int64
forall a. Integral a => Parser a
P.decimal (ByteString -> Either String Int64)
-> (ByteString -> ByteString) -> ByteString -> Either String Int64
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ByteString -> ByteString
S.take Int
7
(ByteString -> ByteString)
-> (ByteString -> ByteString) -> ByteString -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ByteString -> ByteString -> ByteString
`S.append` String -> ByteString
S.pack String
"000000") (ByteString -> Parser Int64) -> Parser ByteString -> Parser Int64
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Char -> Bool) -> Parser ByteString
P.takeWhile1 Char -> Bool
P.isDigit
Micro -> Parser Micro
forall a. a -> Parser a
forall (m :: * -> *) a. Monad m => a -> m a
return (Micro -> Parser Micro) -> Micro -> Parser Micro
forall a b. (a -> b) -> a -> b
$ Int64 -> Micro
Micro (Int64 -> Int64 -> Int64
forall a. Integral a => a -> a -> a
div (Int64
us10 Int64 -> Int64 -> Int64
forall a. Num a => a -> a -> a
+ Int64
5) Int64
10)
{-# INLINE unixEpoch #-}
unixEpoch :: TimeParse
unixEpoch :: TimeParse
unixEpoch = TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfYear :: Int
tpDayOfMonth :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} where
tpCentury :: Int
tpCentury = Int
19
tpCenturyYear :: Int
tpCenturyYear = Int
70
tpMonth :: Int
tpMonth = Int
1
tpWeekOfYear :: Int
tpWeekOfYear = Int
1
tpDayOfYear :: Int
tpDayOfYear = Int
1
tpDayOfMonth :: Int
tpDayOfMonth = Int
1
tpDayOfWeek :: Int
tpDayOfWeek = Int
4
tpFlags :: Int
tpFlags = Int
0
tpHour :: Int
tpHour = Int
0
tpMinute :: Int
tpMinute = Int
0
tpSecond :: Int
tpSecond = Int
0
tpSecFrac :: DiffTime
tpSecFrac = DiffTime
forall v. AdditiveGroup v => v
zeroV
tpPOSIXTime :: POSIXTime
tpPOSIXTime = POSIXTime
forall v. AdditiveGroup v => v
zeroV
tpTimeZone :: TimeZone
tpTimeZone = TimeZone
utc
{-# INLINEABLE parseTime #-}
parseTime :: (ParseTime t)
=> TimeLocale
-> String
-> String
-> Maybe t
parseTime :: forall t. ParseTime t => TimeLocale -> String -> String -> Maybe t
parseTime TimeLocale
l String
spec = (String -> Maybe t) -> (t -> Maybe t) -> Either String t -> Maybe t
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Maybe t -> String -> Maybe t
forall a b. a -> b -> a
const Maybe t
forall a. Maybe a
Nothing) t -> Maybe t
forall a. a -> Maybe a
Just
(Either String t -> Maybe t)
-> (String -> Either String t) -> String -> Maybe t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser t -> ByteString -> Either String t
forall a. Parser a -> ByteString -> Either String a
P.parseOnly Parser t
parser (ByteString -> Either String t)
-> (String -> ByteString) -> String -> Either String t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
utf8String where
parser :: Parser t
parser = TimeParse -> t
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> t) -> Parser () -> Parser ByteString (TimeParse -> t)
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ()
P.skipSpace Parser ByteString (TimeParse -> t) -> Parser TimeParse -> Parser t
forall a b.
Parser ByteString (a -> b)
-> Parser ByteString a -> Parser ByteString b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> TimeLocale -> String -> Parser TimeParse
timeParser TimeLocale
l String
spec
Parser t -> Parser () -> Parser t
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
P.skipSpace Parser t -> Parser () -> Parser t
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall t. Chunk t => Parser t ()
P.endOfInput
{-# INLINEABLE readTime #-}
readTime :: (ParseTime t)
=> TimeLocale
-> String
-> String
-> t
readTime :: forall t. ParseTime t => TimeLocale -> String -> String -> t
readTime TimeLocale
l String
spec = (String -> t) -> (t -> t) -> Either String t -> t
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either String -> t
forall a. HasCallStack => String -> a
error t -> t
forall a. a -> a
id (Either String t -> t)
-> (String -> Either String t) -> String -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser t -> ByteString -> Either String t
forall a. Parser a -> ByteString -> Either String a
P.parseOnly Parser t
parser (ByteString -> Either String t)
-> (String -> ByteString) -> String -> Either String t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ByteString
utf8String where
parser :: Parser t
parser = TimeParse -> t
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> t) -> Parser () -> Parser ByteString (TimeParse -> t)
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ()
P.skipSpace Parser ByteString (TimeParse -> t) -> Parser TimeParse -> Parser t
forall a b.
Parser ByteString (a -> b)
-> Parser ByteString a -> Parser ByteString b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> TimeLocale -> String -> Parser TimeParse
timeParser TimeLocale
l String
spec
Parser t -> Parser () -> Parser t
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
P.skipSpace Parser t -> Parser () -> Parser t
forall a b.
Parser ByteString a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ()
forall t. Chunk t => Parser t ()
P.endOfInput
{-# INLINEABLE readsTime #-}
readsTime :: (ParseTime t)
=> TimeLocale
-> String
-> ReadS t
readsTime :: forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
l String
spec = Parser t -> ReadS t
forall a. Parser a -> ReadS a
parserToReadS (Parser t -> ReadS t) -> Parser t -> ReadS t
forall a b. (a -> b) -> a -> b
$
TimeParse -> t
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> t) -> Parser () -> Parser ByteString (TimeParse -> t)
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ()
P.skipSpace Parser ByteString (TimeParse -> t) -> Parser TimeParse -> Parser t
forall a b.
Parser ByteString (a -> b)
-> Parser ByteString a -> Parser ByteString b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> TimeLocale -> String -> Parser TimeParse
timeParser TimeLocale
l String
spec
deriving instance Read UTCView
#if SHOW_INTERNAL
deriving instance Read Day
deriving instance Read TimeOfDay
deriving instance Read LocalTime
deriving instance Read ZonedTime
deriving instance Read TimeZone
instance Read UTCTime where
{-# INLINE readsPrec #-}
readsPrec n = fmap (first $ review utcTime) . readsPrec n
#else
instance Read Day where
{-# INLINEABLE readsPrec #-}
readsPrec :: Int -> ReadS Day
readsPrec Int
_ = Bool -> ReadS Day -> ReadS Day
forall a. Bool -> ReadS a -> ReadS a
readParen Bool
False (ReadS Day -> ReadS Day) -> ReadS Day -> ReadS Day
forall a b. (a -> b) -> a -> b
$
TimeLocale -> String -> ReadS Day
forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
defaultTimeLocale String
"%Y-%m-%d"
instance Read TimeOfDay where
{-# INLINEABLE readsPrec #-}
readsPrec :: Int -> ReadS TimeOfDay
readsPrec Int
_ = Bool -> ReadS TimeOfDay -> ReadS TimeOfDay
forall a. Bool -> ReadS a -> ReadS a
readParen Bool
False (ReadS TimeOfDay -> ReadS TimeOfDay)
-> ReadS TimeOfDay -> ReadS TimeOfDay
forall a b. (a -> b) -> a -> b
$
TimeLocale -> String -> ReadS TimeOfDay
forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
defaultTimeLocale String
"%H:%M:%S%Q"
instance Read LocalTime where
{-# INLINEABLE readsPrec #-}
readsPrec :: Int -> ReadS LocalTime
readsPrec Int
_ = Bool -> ReadS LocalTime -> ReadS LocalTime
forall a. Bool -> ReadS a -> ReadS a
readParen Bool
False (ReadS LocalTime -> ReadS LocalTime)
-> ReadS LocalTime -> ReadS LocalTime
forall a b. (a -> b) -> a -> b
$
TimeLocale -> String -> ReadS LocalTime
forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
defaultTimeLocale String
"%Y-%m-%d %H:%M:%S%Q"
instance Read ZonedTime where
{-# INLINEABLE readsPrec #-}
readsPrec :: Int -> ReadS ZonedTime
readsPrec Int
_ = Bool -> ReadS ZonedTime -> ReadS ZonedTime
forall a. Bool -> ReadS a -> ReadS a
readParen Bool
False (ReadS ZonedTime -> ReadS ZonedTime)
-> ReadS ZonedTime -> ReadS ZonedTime
forall a b. (a -> b) -> a -> b
$
TimeLocale -> String -> ReadS ZonedTime
forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
defaultTimeLocale String
"%Y-%m-%d %H:%M:%S%Q %Z"
instance Read UTCTime where
{-# INLINEABLE readsPrec #-}
readsPrec :: Int -> ReadS UTCTime
readsPrec Int
_ = Bool -> ReadS UTCTime -> ReadS UTCTime
forall a. Bool -> ReadS a -> ReadS a
readParen Bool
False (ReadS UTCTime -> ReadS UTCTime) -> ReadS UTCTime -> ReadS UTCTime
forall a b. (a -> b) -> a -> b
$
TimeLocale -> String -> ReadS UTCTime
forall t. ParseTime t => TimeLocale -> String -> ReadS t
readsTime TimeLocale
defaultTimeLocale String
"%Y-%m-%d %H:%M:%S%Q %Z"
#endif
class ParseTime t where
buildTime :: TimeParse -> t
instance ParseTime TimeOfDay where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> TimeOfDay
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> DiffTime -> TimeOfDay
TimeOfDay Int
h Int
tpMinute
(Int -> DiffTime
forall n t. (Real n, TimeDiff t) => n -> t
fromSeconds Int
tpSecond DiffTime -> DiffTime -> DiffTime
forall v. AdditiveGroup v => v -> v -> v
^+^ DiffTime
tpSecFrac) where
h :: Int
h = case TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour of
Bool
False -> Int
tpHour
Bool
True -> case TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
PostMeridiem of
Bool
False -> Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
tpHour Int
12
Bool
True -> if Int
tpHour Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
12 then Int
tpHour Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
12 else Int
tpHour
{-# INLINE tpYear #-}
tpYear :: TimeParse -> Year
tpYear :: TimeParse -> Int
tpYear tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int
tpCenturyYear Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
100 Int -> Int -> Int
forall a. Num a => a -> a -> a
* if TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
HasCentury
then Int
tpCentury else if Int
tpCenturyYear Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
69 then Int
20 else Int
19
instance ParseTime YearMonthDay where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> YearMonthDay
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> Int -> YearMonthDay
YearMonthDay (TimeParse -> Int
tpYear TimeParse
tp) Int
tpMonth Int
tpDayOfMonth
instance ParseTime MonthDay where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> MonthDay
buildTime TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> MonthDay
MonthDay Int
tpMonth Int
tpDayOfMonth
instance ParseTime OrdinalDate where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> OrdinalDate
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> OrdinalDate
OrdinalDate (TimeParse -> Int
tpYear TimeParse
tp) Int
tpDayOfYear
instance ParseTime WeekDate where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> WeekDate
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> Int -> WeekDate
WeekDate (TimeParse -> Int
tpYear TimeParse
tp) Int
tpWeekOfYear
(if Int
tpDayOfWeek Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else Int
tpDayOfWeek)
instance ParseTime SundayWeek where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> SundayWeek
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> Int -> SundayWeek
SundayWeek (TimeParse -> Int
tpYear TimeParse
tp) Int
tpWeekOfYear
(if Int
tpDayOfWeek Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 then Int
0 else Int
tpDayOfWeek)
instance ParseTime MondayWeek where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> MondayWeek
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = Int -> Int -> Int -> MondayWeek
MondayWeek (TimeParse -> Int
tpYear TimeParse
tp) Int
tpWeekOfYear
(if Int
tpDayOfWeek Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else Int
tpDayOfWeek)
instance ParseTime LocalTime where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> LocalTime
buildTime = Day -> TimeOfDay -> LocalTime
LocalTime (Day -> TimeOfDay -> LocalTime)
-> (TimeParse -> Day) -> TimeParse -> TimeOfDay -> LocalTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeParse -> Day
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> TimeOfDay -> LocalTime)
-> (TimeParse -> TimeOfDay) -> TimeParse -> LocalTime
forall a b.
(TimeParse -> a -> b) -> (TimeParse -> a) -> TimeParse -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> TimeParse -> TimeOfDay
forall t. ParseTime t => TimeParse -> t
buildTime
instance ParseTime Day where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> Day
buildTime TimeParse
tp
| TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsOrdinalDate = Overloaded Reviewed Identity Day Day OrdinalDate OrdinalDate
Iso' Day OrdinalDate
ordinalDate Overloaded Reviewed Identity Day Day OrdinalDate OrdinalDate
-> OrdinalDate -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> OrdinalDate
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsGregorian = Overloaded Reviewed Identity Day Day YearMonthDay YearMonthDay
Iso' Day YearMonthDay
gregorian Overloaded Reviewed Identity Day Day YearMonthDay YearMonthDay
-> YearMonthDay -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> YearMonthDay
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate = Overloaded Reviewed Identity Day Day WeekDate WeekDate
Iso' Day WeekDate
weekDate Overloaded Reviewed Identity Day Day WeekDate WeekDate
-> WeekDate -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> WeekDate
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsSundayWeek = Overloaded Reviewed Identity Day Day SundayWeek SundayWeek
Iso' Day SundayWeek
sundayWeek Overloaded Reviewed Identity Day Day SundayWeek SundayWeek
-> SundayWeek -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> SundayWeek
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsMondayWeek = Overloaded Reviewed Identity Day Day MondayWeek MondayWeek
Iso' Day MondayWeek
mondayWeek Overloaded Reviewed Identity Day Day MondayWeek MondayWeek
-> MondayWeek -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> MondayWeek
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| Bool
otherwise = Overloaded Reviewed Identity Day Day OrdinalDate OrdinalDate
Iso' Day OrdinalDate
ordinalDate Overloaded Reviewed Identity Day Day OrdinalDate OrdinalDate
-> OrdinalDate -> Day
forall s t a b. AReview s t a b -> b -> t
# TimeParse -> OrdinalDate
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
instance ParseTime TimeZone where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> TimeZone
buildTime = TimeParse -> TimeZone
tpTimeZone
instance ParseTime ZonedTime where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> ZonedTime
buildTime = LocalTime -> TimeZone -> ZonedTime
ZonedTime (LocalTime -> TimeZone -> ZonedTime)
-> (TimeParse -> LocalTime) -> TimeParse -> TimeZone -> ZonedTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeParse -> LocalTime
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> TimeZone -> ZonedTime)
-> (TimeParse -> TimeZone) -> TimeParse -> ZonedTime
forall a b.
(TimeParse -> a -> b) -> (TimeParse -> a) -> TimeParse -> b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> TimeParse -> TimeZone
forall t. ParseTime t => TimeParse -> t
buildTime
instance ParseTime UTCTime where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> UTCTime
buildTime tp :: TimeParse
tp@TimeParse {Int
DiffTime
POSIXTime
TimeZone
tpCentury :: TimeParse -> Int
tpCenturyYear :: TimeParse -> Int
tpMonth :: TimeParse -> Int
tpWeekOfYear :: TimeParse -> Int
tpDayOfMonth :: TimeParse -> Int
tpDayOfYear :: TimeParse -> Int
tpDayOfWeek :: TimeParse -> Int
tpFlags :: TimeParse -> Int
tpHour :: TimeParse -> Int
tpMinute :: TimeParse -> Int
tpSecond :: TimeParse -> Int
tpSecFrac :: TimeParse -> DiffTime
tpPOSIXTime :: TimeParse -> POSIXTime
tpTimeZone :: TimeParse -> TimeZone
tpCentury :: Int
tpCenturyYear :: Int
tpMonth :: Int
tpWeekOfYear :: Int
tpDayOfMonth :: Int
tpDayOfYear :: Int
tpDayOfWeek :: Int
tpFlags :: Int
tpHour :: Int
tpMinute :: Int
tpSecond :: Int
tpSecFrac :: DiffTime
tpPOSIXTime :: POSIXTime
tpTimeZone :: TimeZone
..} = if TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsPOSIXTime
then Overloaded Reviewed Identity UTCTime UTCTime POSIXTime POSIXTime
Iso' UTCTime POSIXTime
posixTime Overloaded Reviewed Identity UTCTime UTCTime POSIXTime POSIXTime
-> POSIXTime -> UTCTime
forall s t a b. AReview s t a b -> b -> t
# POSIXTime
tpPOSIXTime
else (TimeZone, UTCTime) -> UTCTime
forall a b. (a, b) -> b
snd ((TimeZone, UTCTime) -> UTCTime) -> (TimeZone, UTCTime) -> UTCTime
forall a b. (a -> b) -> a -> b
$ TimeParse -> ZonedTime
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp ZonedTime
-> Getting (TimeZone, UTCTime) ZonedTime (TimeZone, UTCTime)
-> (TimeZone, UTCTime)
forall s a. s -> Getting a s a -> a
^. AnIso (TimeZone, UTCTime) (TimeZone, UTCTime) ZonedTime ZonedTime
-> Iso ZonedTime ZonedTime (TimeZone, UTCTime) (TimeZone, UTCTime)
forall s t a b. AnIso s t a b -> Iso b a t s
from AnIso (TimeZone, UTCTime) (TimeZone, UTCTime) ZonedTime ZonedTime
Iso' (TimeZone, UTCTime) ZonedTime
zonedTime
instance ParseTime UniversalTime where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> UniversalTime
buildTime (TimeParse -> UTCTime
forall t. ParseTime t => TimeParse -> t
buildTime -> UTCRep POSIXTime
t) = POSIXTime -> UniversalTime
UniversalRep POSIXTime
t
instance ParseTime AbsoluteTime where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> AbsoluteTime
buildTime TimeParse
tp = TimeParse -> UTCTime
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp UTCTime
-> Getting AbsoluteTime UTCTime AbsoluteTime -> AbsoluteTime
forall s a. s -> Getting a s a -> a
^. TAIUTCMap -> Iso' UTCTime AbsoluteTime
absoluteTime (Map UTCTime TAIUTCRow -> Map AbsoluteTime TAIUTCRow -> TAIUTCMap
TAIUTCMap Map UTCTime TAIUTCRow
forall a. Monoid a => a
mempty Map AbsoluteTime TAIUTCRow
forall a. Monoid a => a
mempty)
timeZoneParser :: Parser TimeZone
timeZoneParser :: Parser ByteString TimeZone
timeZoneParser = String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"TAI" Int
0 Bool
False Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"UT1" Int
0 Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ZULU" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"Z" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"YST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"YDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
08 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
08 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WETDST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WAT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WAST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
07 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"WADT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
08 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"UTC" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"UT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"TFT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
05 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SWT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SCT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SAST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"SADT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
30) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"RET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"PST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
08 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"PDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
07 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NZT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
12 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NZST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
12 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NZDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
13 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
11 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
03 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NOR" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NFT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
03 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"NDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
02 Int
30) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MVT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
05 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MUT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
08 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
07 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MMT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
06 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MHT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MEZ" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MEWT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"METDST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MEST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
06 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MAWT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
06 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"MART" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
09 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"LIGT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"KST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"JT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
07 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"JST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IRT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IOT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
05 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IDLW" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
12 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"IDLE" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
12 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"HST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"HMT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"HDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
09 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"GST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"GMT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
00 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"FWT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"FST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"FNT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"FNST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
05 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EETDST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
04 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EAT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EAST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"EAST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"DNT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CXT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
07 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
06 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CETDST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CET" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CEST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
05 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CCT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
08 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CAT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CAST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"CADT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
30) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"BT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
03 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"BST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
01 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"BRT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
03 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"BRST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"BDST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
02 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AWT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
03 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AWST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
08 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AWSST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ALMT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
06 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ALMST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
07 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AKST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
09 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AKDT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
08 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AHST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AFT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
04 Int
30) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AEST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"AESST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
11 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ADT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
03 Int
00) Bool
True
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ACT" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
05 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ACST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($-) Int
04 Int
00) Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall a. Parser a -> Parser a -> Parser a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> String -> Int -> Bool -> Parser ByteString TimeZone
zone String
"ACSST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
30) Bool
False
where
zone :: String -> Int -> Bool -> Parser ByteString TimeZone
zone String
name Int
offset Bool
dst = Int -> Bool -> String -> TimeZone
TimeZone Int
offset Bool
dst String
name TimeZone -> Parser ByteString -> Parser ByteString TimeZone
forall a b. a -> Parser ByteString b -> Parser ByteString a
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> Parser ByteString
P.string (String -> ByteString
S.pack String
name)
$+ :: a -> a -> a
($+) a
h a
m = a
h a -> a -> a
forall a. Num a => a -> a -> a
* a
60 a -> a -> a
forall a. Num a => a -> a -> a
+ a
m
$- :: a -> a -> a
($-) a
h a
m = a -> a
forall a. Num a => a -> a
negate (a
h a -> a -> a
forall a. Num a => a -> a -> a
* a
60 a -> a -> a
forall a. Num a => a -> a -> a
+ a
m)