{-# LANGUAGE LambdaCase #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE ViewPatterns #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Data.Time.Format.Internal
( formatTime
, parseTime
, readTime
, readsTime
) where
import Control.Applicative
import Control.Monad.State.Strict
import Data.Aeson (FromJSON(..), ToJSON(..), withText, Value(String))
import Data.Attoparsec.ByteString.Char8 (Parser, Result, IResult (..))
import qualified Data.Attoparsec.ByteString.Char8 as P
import Data.Bits
import qualified Data.ByteString.Builder as B
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Lazy as L
import Data.Char
import Data.Int
import qualified Data.Text as T
import qualified Data.Text as Text
import qualified Data.Text.Encoding as Text
import qualified Data.Vector.Unboxed as VU
import Data.VectorSpace
import Lens.Micro
import Data.Time.Internal
import Data.Time.Format.Locale
infix 4 .=
(.=) :: MonadState s m => ASetter s s a b -> b -> m ()
ASetter s s a b
l .= :: ASetter s s a b -> b -> m ()
.= b
x = (s -> s) -> m ()
forall s (m :: * -> *). MonadState s m => (s -> s) -> m ()
modify (ASetter s s a b
l ASetter s s a b -> b -> s -> s
forall s t a b. ASetter s t a b -> b -> s -> t
.~ b
x)
{-# INLINE (.=) #-}
assign :: MonadState s m => ASetter s s a b -> b -> m ()
assign :: ASetter s s a b -> b -> m ()
assign ASetter s s a b
l b
x = ASetter s s a b
l ASetter s s a b -> b -> m ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= b
x
{-# INLINE assign #-}
shows02 :: Int -> ShowS
shows02 :: Int -> ShowS
shows02 Int
n = if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
10 then (:) Char
'0' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n else Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n
{-# INLINE shows02 #-}
shows_2 :: Int -> ShowS
shows_2 :: Int -> ShowS
shows_2 Int
n = if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
10 then (:) Char
' ' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n else Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n
{-# INLINE shows_2 #-}
shows03 :: Int -> ShowS
shows03 :: Int -> ShowS
shows03 Int
n
| Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
10 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"00" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n
| Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
100 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"0" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n
| Bool
otherwise = Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
n
{-# INLINE shows03 #-}
showsYear :: Int -> ShowS
showsYear :: Int -> ShowS
showsYear n :: Int
n@(Int -> Int
forall a. Num a => a -> a
abs -> Int
u)
| Int
u Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
10 = ShowS
neg ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"000" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
u
| Int
u Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
100 = ShowS
neg ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"00" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
u
| Int
u Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
1000 = ShowS
neg ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"0" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
u
| Bool
otherwise = ShowS
neg ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
forall a. Show a => a -> ShowS
shows Int
u
where
neg :: ShowS
neg = if Int
n Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
0 then (:) Char
'-' else ShowS
forall a. a -> a
id
{-# INLINE showsYear #-}
fills06 :: Micros -> ShowS
fills06 :: Micros -> ShowS
fills06 Micros
n
| Micros
n Micros -> Micros -> Bool
forall a. Ord a => a -> a -> Bool
< Micros
10 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"00000"
| Micros
n Micros -> Micros -> Bool
forall a. Ord a => a -> a -> Bool
< Micros
100 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"0000"
| Micros
n Micros -> Micros -> Bool
forall a. Ord a => a -> a -> Bool
< Micros
1000 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"000"
| Micros
n Micros -> Micros -> Bool
forall a. Ord a => a -> a -> Bool
< Micros
10000 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"00"
| Micros
n Micros -> Micros -> Bool
forall a. Ord a => a -> a -> Bool
< Micros
100000 = [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"0"
| Bool
otherwise = ShowS
forall a. a -> a
id
{-# INLINE fills06 #-}
drops0 :: Micros -> ShowS
drops0 :: Micros -> ShowS
drops0 Micros
n = case Micros -> Micros -> (Micros, Micros)
forall a. Integral a => a -> a -> (a, a)
divMod Micros
n Micros
10 of
(Micros
q, Micros
0) -> Micros -> ShowS
drops0 Micros
q
(Micros, Micros)
_ -> Micros -> ShowS
forall a. Show a => a -> ShowS
shows Micros
n
{-# INLINE drops0 #-}
type UnboundedInt = Int
type Minutes = UnboundedInt
type Days = UnboundedInt
type Year = UnboundedInt
type Century = UnboundedInt
type BoundedInt = Int
type Hour = BoundedInt
type Minute = BoundedInt
type Second = BoundedInt
type Month = BoundedInt
type DayOfMonth = BoundedInt
type DayOfYear = BoundedInt
type DayOfWeek = BoundedInt
type WeekOfYear = BoundedInt
data YearMonthDay = YearMonthDay
{ YearMonthDay -> Int
_ymdYear :: {-# UNPACK #-} !Year
, YearMonthDay -> Int
_ymdMonth :: {-# UNPACK #-} !Month
, YearMonthDay -> Int
_ymdDay :: {-# UNPACK #-} !DayOfMonth
}
ymdFromOrdinal :: OrdinalDate -> YearMonthDay
ymdFromOrdinal :: OrdinalDate -> YearMonthDay
ymdFromOrdinal (OrdinalDate Int
y Int
yd) = Int -> Int -> Int -> YearMonthDay
YearMonthDay Int
y Int
m Int
d
where
MonthDay Int
m Int
d = Bool -> Int -> MonthDay
monthDaysFromDayOfYear (Int -> Bool
isLeapYear Int
y) Int
yd
{-# INLINEABLE ymdFromOrdinal #-}
ymdToOrdinal :: YearMonthDay -> OrdinalDate
ymdToOrdinal :: YearMonthDay -> OrdinalDate
ymdToOrdinal (YearMonthDay Int
y Int
m Int
d) = Int -> Int -> OrdinalDate
OrdinalDate Int
y (Int -> OrdinalDate) -> Int -> OrdinalDate
forall a b. (a -> b) -> a -> b
$
Bool -> MonthDay -> Int
monthDaysToDayOfYear (Int -> Bool
isLeapYear Int
y) (Int -> Int -> MonthDay
MonthDay Int
m Int
d)
{-# INLINEABLE ymdToOrdinal #-}
toGregorian :: YearMonthDay -> ModifiedJulianDay
toGregorian :: YearMonthDay -> ModifiedJulianDay
toGregorian = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> (YearMonthDay -> OrdinalDate)
-> YearMonthDay
-> ModifiedJulianDay
forall b c a. (b -> c) -> (a -> b) -> a -> c
. YearMonthDay -> OrdinalDate
ymdToOrdinal
{-# INLINEABLE toGregorian #-}
data OrdinalDate = OrdinalDate
{ OrdinalDate -> Int
_odYear :: {-# UNPACK #-} !Year
, OrdinalDate -> Int
_odDay :: {-# UNPACK #-} !DayOfYear
}
isLeapYear :: Year -> Bool
isLeapYear :: Int -> Bool
isLeapYear Int
y = Int
y Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 Bool -> Bool -> Bool
&& (Int
r100 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
/= Int
0 Bool -> Bool -> Bool
|| Int
q100 Int -> Int -> Int
forall a. Bits a => a -> a -> a
.&. Int
3 Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0)
where
(Int
q100, Int
r100) = Int
y Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
100
toOrdinalDate :: ModifiedJulianDay -> OrdinalDate
toOrdinalDate :: ModifiedJulianDay -> OrdinalDate
toOrdinalDate (ModifiedJulianDay Int
mjd)
| Int
dayB0 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
0 = case Int -> OrdinalDate
toOrdB0 Int
dayInQC of
OrdinalDate Int
y Int
yd -> Int -> Int -> OrdinalDate
OrdinalDate (Int
y Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
quadCent Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
400) Int
yd
| Bool
otherwise = Int -> OrdinalDate
toOrdB0 Int
dayB0
where
dayB0 :: Int
dayB0 = Int
mjd Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
678575
(Int
quadCent, Int
dayInQC) = Int
dayB0 Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`divMod` Int
146097
toOrdB0 :: Int -> OrdinalDate
toOrdB0 Int
dB0 = OrdinalDate
res
where
(Int
y0, Int
r) = (Int
400 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
dB0) Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
`quotRem` Int
146097
d0 :: Int
d0 = Int -> Int -> Int
forall a. (Integral a, Bits a) => a -> a -> a
dayInYear Int
y0 Int
dB0
d1 :: Int
d1 = Int -> Int -> Int
forall a. (Integral a, Bits a) => a -> a -> a
dayInYear (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
dB0
res :: OrdinalDate
res = if Int
r Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
146097 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
600 Bool -> Bool -> Bool
&& Int
d1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> Int
0
then Int -> Int -> OrdinalDate
OrdinalDate (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
d1
else Int -> Int -> OrdinalDate
OrdinalDate (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int
d0
{-# INLINE toOrdB0 #-}
dayInYear :: a -> a -> a
dayInYear a
y0 a
dB0 = a
dB0 a -> a -> a
forall a. Num a => a -> a -> a
- a
365 a -> a -> a
forall a. Num a => a -> a -> a
* a
y0 a -> a -> a
forall a. Num a => a -> a -> a
- a
leaps a -> a -> a
forall a. Num a => a -> a -> a
+ a
1
where
leaps :: a
leaps = a
y0 a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftR` Int
2 a -> a -> a
forall a. Num a => a -> a -> a
- a
centuries a -> a -> a
forall a. Num a => a -> a -> a
+ a
centuries a -> Int -> a
forall a. Bits a => a -> Int -> a
`shiftR` Int
2
centuries :: a
centuries = a
y0 a -> a -> a
forall a. Integral a => a -> a -> a
`quot` a
100
{-# INLINE dayInYear #-}
{-# INLINEABLE toOrdinalDate #-}
fromOrdinalDate :: OrdinalDate -> ModifiedJulianDay
fromOrdinalDate :: OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate Int
year Int
yd) = Int -> ModifiedJulianDay
ModifiedJulianDay Int
mjd
where
years :: Int
years = Int
year Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
centuries :: Int
centuries = Int
years Int -> Int -> Int
forall a. Integral a => a -> a -> a
`div` Int
100
leaps :: Int
leaps = Int
years Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR` Int
2 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
centuries Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
centuries Int -> Int -> Int
forall a. Bits a => a -> Int -> a
`shiftR` Int
2
mjd :: Int
mjd = Int
365 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
years Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
leaps Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
678576
Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Int -> Int
forall c. Ord c => c -> c -> c -> c
clip Int
1 (if Int -> Bool
isLeapYear Int
year then Int
366 else Int
365) Int
yd
clip :: c -> c -> c -> c
clip c
a c
b = c -> c -> c
forall a. Ord a => a -> a -> a
max c
a (c -> c) -> (c -> c) -> c -> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. c -> c -> c
forall a. Ord a => a -> a -> a
min c
b
{-# INLINEABLE fromOrdinalDate #-}
monthLengths :: VU.Vector Days
monthLengths :: Vector Int
monthLengths = [Int] -> Vector Int
forall a. Unbox a => [a] -> Vector a
VU.fromList [Int
31,Int
28,Int
31,Int
30,Int
31,Int
30,Int
31,Int
31,Int
30,Int
31,Int
30,Int
31]
{-# NOINLINE monthLengths #-}
monthLengthsLeap :: VU.Vector Days
monthLengthsLeap :: Vector Int
monthLengthsLeap = [Int] -> Vector Int
forall a. Unbox a => [a] -> Vector a
VU.fromList [Int
31,Int
29,Int
31,Int
30,Int
31,Int
30,Int
31,Int
31,Int
30,Int
31,Int
30,Int
31]
{-# NOINLINE monthLengthsLeap #-}
monthDays :: VU.Vector (Int8, Int8)
monthDays :: Vector (Int8, Int8)
monthDays = Int -> (Int -> (Int8, Int8)) -> Vector (Int8, Int8)
forall a. Unbox a => Int -> (Int -> a) -> Vector a
VU.generate Int
365 Int -> (Int8, Int8)
forall a b. (Num a, Num b) => Int -> (a, b)
go
where
dom01 :: Vector Int
dom01 = (Int -> Int -> Int) -> Int -> Vector Int -> Vector Int
forall a b.
(Unbox a, Unbox b) =>
(a -> b -> a) -> a -> Vector b -> Vector a
VU.prescanl' Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
0 Vector Int
monthLengths
go :: Int -> (a, b)
go Int
yd = (Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
m, Int -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
d)
where
m :: Int
m = Int -> (Int -> Int) -> Maybe Int -> Int
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Int
12 Int -> Int
forall a. a -> a
id (Maybe Int -> Int) -> Maybe Int -> Int
forall a b. (a -> b) -> a -> b
$ (Int -> Bool) -> Vector Int -> Maybe Int
forall a. Unbox a => (a -> Bool) -> Vector a -> Maybe Int
VU.findIndex (Int
yd Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<) Vector Int
dom01
d :: Int
d = Int -> Int
forall a. Enum a => a -> a
succ Int
yd Int -> Int -> Int
forall a. Num a => a -> a -> a
- Vector Int -> Int -> Int
forall a. Unbox a => Vector a -> Int -> a
VU.unsafeIndex Vector Int
dom01 (Int -> Int
forall a. Enum a => a -> a
pred Int
m)
{-# NOINLINE monthDays #-}
monthDaysLeap :: VU.Vector (Int8, Int8)
monthDaysLeap :: Vector (Int8, Int8)
monthDaysLeap = Int -> (Int -> (Int8, Int8)) -> Vector (Int8, Int8)
forall a. Unbox a => Int -> (Int -> a) -> Vector a
VU.generate Int
366 Int -> (Int8, Int8)
forall a b. (Num a, Num b) => Int -> (a, b)
go
where
dom01 :: Vector Int
dom01 = (Int -> Int -> Int) -> Int -> Vector Int -> Vector Int
forall a b.
(Unbox a, Unbox b) =>
(a -> b -> a) -> a -> Vector b -> Vector a
VU.prescanl' Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) Int
0 Vector Int
monthLengthsLeap
go :: Int -> (a, b)
go Int
yd = (Int -> a
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
m, Int -> b
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
d)
where
m :: Int
m = Int -> (Int -> Int) -> Maybe Int -> Int
forall b a. b -> (a -> b) -> Maybe a -> b
maybe Int
12 Int -> Int
forall a. a -> a
id (Maybe Int -> Int) -> Maybe Int -> Int
forall a b. (a -> b) -> a -> b
$ (Int -> Bool) -> Vector Int -> Maybe Int
forall a. Unbox a => (a -> Bool) -> Vector a -> Maybe Int
VU.findIndex (Int
yd Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<) Vector Int
dom01
d :: Int
d = Int -> Int
forall a. Enum a => a -> a
succ Int
yd Int -> Int -> Int
forall a. Num a => a -> a -> a
- Vector Int -> Int -> Int
forall a. Unbox a => Vector a -> Int -> a
VU.unsafeIndex Vector Int
dom01 (Int -> Int
forall a. Enum a => a -> a
pred Int
m)
{-# NOINLINE monthDaysLeap #-}
data MonthDay = MonthDay
{ MonthDay -> Int
_mdMonth :: {-# UNPACK #-} !Month
, MonthDay -> Int
_mdDay :: {-# UNPACK #-} !DayOfMonth
}
monthDaysFromDayOfYear :: Bool -> DayOfYear -> MonthDay
monthDaysFromDayOfYear :: Bool -> Int -> MonthDay
monthDaysFromDayOfYear Bool
leap Int
yd = Int -> Int -> MonthDay
MonthDay Int
m Int
d
where
i :: Int
i = Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
0 (Int -> Int) -> (Int -> Int) -> Int -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> Int
forall a. Ord a => a -> a -> a
min Int
lastDay (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int -> Int
forall a. Enum a => a -> a
pred Int
yd
(Int8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
m, Int8 -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
d) = Vector (Int8, Int8) -> Int -> (Int8, Int8)
forall a. Unbox a => Vector a -> Int -> a
VU.unsafeIndex Vector (Int8, Int8)
table Int
i
(Int
lastDay, Vector (Int8, Int8)
table) = if Bool
leap
then (Int
365, Vector (Int8, Int8)
monthDaysLeap)
else (Int
364, Vector (Int8, Int8)
monthDays)
{-# INLINE monthDaysFromDayOfYear #-}
monthDaysToDayOfYear :: Bool -> MonthDay -> DayOfYear
monthDaysToDayOfYear :: Bool -> MonthDay -> Int
monthDaysToDayOfYear Bool
leap (MonthDay Int
month Int
mday) = Int -> Int -> Int
forall a. Integral a => a -> a -> a
div (Int
367 Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
362) Int
12 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
k Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
d
where
m :: Int
m = Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
1 (Int -> Int) -> (Int -> Int) -> Int -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> Int
forall a. Ord a => a -> a -> a
min Int
12 (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int
month
l :: Int
l = Vector Int -> Int -> Int
forall a. Unbox a => Vector a -> Int -> a
VU.unsafeIndex Vector Int
lengths (Int -> Int
forall a. Enum a => a -> a
pred Int
m)
d :: Int
d = Int -> Int -> Int
forall a. Ord a => a -> a -> a
max Int
1 (Int -> Int) -> (Int -> Int) -> Int -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> Int
forall a. Ord a => a -> a -> a
min Int
l (Int -> Int) -> Int -> Int
forall a b. (a -> b) -> a -> b
$ Int
mday
k :: Int
k = if Int
m Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<= Int
2 then Int
0 else Int
ok
(Vector Int
lengths, Int
ok) = if Bool
leap
then (Vector Int
monthLengthsLeap, -Int
1)
else (Vector Int
monthLengths, -Int
2)
{-# INLINE monthDaysToDayOfYear #-}
data WeekDate = WeekDate
{ WeekDate -> Int
_wdYear :: {-# UNPACK #-} !Year
, WeekDate -> Int
_wdWeek :: {-# UNPACK #-} !WeekOfYear
, WeekDate -> Int
_wdDay :: {-# UNPACK #-} !DayOfWeek
}
toWeekDate :: ModifiedJulianDay -> WeekDate
toWeekDate :: ModifiedJulianDay -> WeekDate
toWeekDate = (ModifiedJulianDay -> ModifiedJulianDay -> WeekDate)
-> ModifiedJulianDay -> WeekDate
forall (m :: * -> *) a. Monad m => m (m a) -> m a
join (OrdinalDate -> ModifiedJulianDay -> WeekDate
toWeekOrdinal (OrdinalDate -> ModifiedJulianDay -> WeekDate)
-> (ModifiedJulianDay -> OrdinalDate)
-> ModifiedJulianDay
-> ModifiedJulianDay
-> WeekDate
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ModifiedJulianDay -> OrdinalDate
toOrdinalDate)
{-# INLINEABLE toWeekDate #-}
fromWeekDate :: WeekDate -> ModifiedJulianDay
fromWeekDate :: WeekDate -> ModifiedJulianDay
fromWeekDate wd :: WeekDate
wd@(WeekDate Int
y Int
_ Int
_) = Int -> WeekDate -> ModifiedJulianDay
fromWeekLast (Int -> Int
lastWeekOfYear Int
y) WeekDate
wd
{-# INLINEABLE fromWeekDate #-}
toWeekOrdinal :: OrdinalDate -> ModifiedJulianDay -> WeekDate
toWeekOrdinal :: OrdinalDate -> ModifiedJulianDay -> WeekDate
toWeekOrdinal (OrdinalDate Int
y0 Int
yd) (ModifiedJulianDay Int
mjd) =
Int -> Int -> Int -> WeekDate
WeekDate Int
y1 (Int
w1 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) (Int
d7mod Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
where
d :: Int
d = Int
mjd Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
2
(Int
d7div, Int
d7mod) = Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
divMod Int
d Int
7
foo :: Int -> Int
foo Int
y = ModifiedJulianDay -> Int
bar (ModifiedJulianDay -> Int) -> ModifiedJulianDay -> Int
forall a b. (a -> b) -> a -> b
$ OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ Int -> Int -> OrdinalDate
OrdinalDate Int
y Int
6
bar :: ModifiedJulianDay -> Int
bar (ModifiedJulianDay Int
k) = Int
d7div Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
k Int
7
w0 :: Int
w0 = ModifiedJulianDay -> Int
bar (ModifiedJulianDay -> Int) -> ModifiedJulianDay -> Int
forall a b. (a -> b) -> a -> b
$ Int -> ModifiedJulianDay
ModifiedJulianDay (Int
d Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
yd Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
4)
(Int
y1, Int
w1) = case Int
w0 of
-1 -> (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1, Int -> Int
foo (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1))
Int
52 | Int -> Int
foo (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 -> (Int
y0 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1, Int
0)
Int
_ -> (Int
y0, Int
w0)
{-# INLINE toWeekOrdinal #-}
lastWeekOfYear :: Year -> WeekOfYear
lastWeekOfYear :: Int -> Int
lastWeekOfYear Int
y = if WeekDate -> Int
_wdWeek WeekDate
wd Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
53 then Int
53 else Int
52
where
wd :: WeekDate
wd = ModifiedJulianDay -> WeekDate
toWeekDate (ModifiedJulianDay -> WeekDate) -> ModifiedJulianDay -> WeekDate
forall a b. (a -> b) -> a -> b
$ OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ Int -> Int -> OrdinalDate
OrdinalDate Int
y Int
365
{-# INLINE lastWeekOfYear #-}
fromWeekLast :: WeekOfYear -> WeekDate -> ModifiedJulianDay
fromWeekLast :: Int -> WeekDate -> ModifiedJulianDay
fromWeekLast Int
wMax (WeekDate Int
y Int
w Int
d) = Int -> ModifiedJulianDay
ModifiedJulianDay Int
mjd
where
ModifiedJulianDay Int
k = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ Int -> Int -> OrdinalDate
OrdinalDate Int
y Int
6
mjd :: Int
mjd = Int
k Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
k Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
10 Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Int -> Int
forall c. Ord c => c -> c -> c -> c
clip Int
1 Int
7 Int
d Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int -> Int -> Int -> Int
forall c. Ord c => c -> c -> c -> c
clip Int
1 Int
wMax Int
w Int -> Int -> Int
forall a. Num a => a -> a -> a
* Int
7
clip :: c -> c -> c -> c
clip c
a c
b = c -> c -> c
forall a. Ord a => a -> a -> a
max c
a (c -> c) -> (c -> c) -> c -> c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. c -> c -> c
forall a. Ord a => a -> a -> a
min c
b
{-# INLINE fromWeekLast #-}
data SundayWeek = SundayWeek
{ SundayWeek -> Int
_swYear :: {-# UNPACK #-} !Year
, SundayWeek -> Int
_swWeek :: {-# UNPACK #-} !WeekOfYear
, SundayWeek -> Int
_swDay :: {-# UNPACK #-} !DayOfWeek
}
fromSundayWeek :: SundayWeek -> ModifiedJulianDay
fromSundayWeek :: SundayWeek -> ModifiedJulianDay
fromSundayWeek (SundayWeek Int
y Int
w Int
d) = Int -> ModifiedJulianDay
ModifiedJulianDay (Int
firstDay Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
yd)
where
ModifiedJulianDay Int
firstDay = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ Int -> Int -> OrdinalDate
OrdinalDate Int
y Int
1
firstSunday :: Int
firstSunday = Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod (Int
4 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
firstDay) Int
7
yd :: Int
yd = Int
firstSunday Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
w Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
d
{-# INLINEABLE fromSundayWeek #-}
toSundayOrdinal :: OrdinalDate -> ModifiedJulianDay -> SundayWeek
toSundayOrdinal :: OrdinalDate -> ModifiedJulianDay -> SundayWeek
toSundayOrdinal (OrdinalDate Int
y Int
yd) (ModifiedJulianDay Int
mjd) =
Int -> Int -> Int -> SundayWeek
SundayWeek Int
y (Int
d7div Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
k Int
7) Int
d7mod
where
d :: Int
d = Int
mjd Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
3
k :: Int
k = Int
d Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
yd
(Int
d7div, Int
d7mod) = Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
divMod Int
d Int
7
{-# INLINE toSundayOrdinal #-}
data MondayWeek = MondayWeek
{ MondayWeek -> Int
_mwYear :: {-# UNPACK #-} !Year
, MondayWeek -> Int
_mwWeek :: {-# UNPACK #-} !WeekOfYear
, MondayWeek -> Int
_mwDay :: {-# UNPACK #-} !DayOfWeek
}
fromMondayWeek :: MondayWeek -> ModifiedJulianDay
fromMondayWeek :: MondayWeek -> ModifiedJulianDay
fromMondayWeek (MondayWeek Int
y Int
w Int
d) = Int -> ModifiedJulianDay
ModifiedJulianDay (Int
firstDay Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
yd)
where
ModifiedJulianDay Int
firstDay = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ Int -> Int -> OrdinalDate
OrdinalDate Int
y Int
1
firstMonday :: Int
firstMonday = Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod (Int
5 Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
firstDay) Int
7
yd :: Int
yd = Int
firstMonday Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
7 Int -> Int -> Int
forall a. Num a => a -> a -> a
* (Int
w Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1) Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
d Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1
{-# INLINEABLE fromMondayWeek #-}
toMondayOrdinal :: OrdinalDate -> ModifiedJulianDay -> MondayWeek
toMondayOrdinal :: OrdinalDate -> ModifiedJulianDay -> MondayWeek
toMondayOrdinal (OrdinalDate Int
y Int
yd) (ModifiedJulianDay Int
mjd) =
Int -> Int -> Int -> MondayWeek
MondayWeek Int
y (Int
d7div Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
k Int
7) (Int
d7mod Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1)
where
d :: Int
d = Int
mjd Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
2
k :: Int
k = Int
d Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
yd
(Int
d7div, Int
d7mod) = Int -> Int -> (Int, Int)
forall a. Integral a => a -> a -> (a, a)
divMod Int
d Int
7
{-# INLINE toMondayOrdinal #-}
data TimeOfDay = TimeOfDay
{ TimeOfDay -> Int
_todHour :: {-# UNPACK #-} !Hour
, TimeOfDay -> Int
_todMin :: {-# UNPACK #-} !Minute
, TimeOfDay -> NominalDiffTime
_todSec :: {-# UNPACK #-} !NominalDiffTime
}
timeOfDayFromNominalDiffTime :: NominalDiffTime -> TimeOfDay
timeOfDayFromNominalDiffTime :: NominalDiffTime -> TimeOfDay
timeOfDayFromNominalDiffTime (NominalDiffTime Micros
t) = Int -> Int -> NominalDiffTime -> TimeOfDay
TimeOfDay
(Micros -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Micros
h) (Micros -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral Micros
m) (Micros -> NominalDiffTime
NominalDiffTime Micros
s)
where
(Micros
h, Micros
ms) = Micros -> Micros -> (Micros, Micros)
forall a. Integral a => a -> a -> (a, a)
quotRem Micros
t Micros
3600000000
(Micros
m, Micros
s) = Micros -> Micros -> (Micros, Micros)
forall a. Integral a => a -> a -> (a, a)
quotRem Micros
ms Micros
60000000
{-# INLINEABLE timeOfDayFromNominalDiffTime #-}
class FormatTime t where
showsTime :: t -> (Char -> ShowS) -> Char -> ShowS
formatTime :: (FormatTime t) => String -> t -> String
formatTime :: [Char] -> t -> [Char]
formatTime [Char]
spec t
t = [Char] -> t -> ShowS
forall t. FormatTime t => [Char] -> t -> ShowS
formatTimeS [Char]
spec t
t [Char]
""
{-# INLINEABLE formatTime #-}
formatTimeS :: (FormatTime t) => String -> t -> ShowS
formatTimeS :: [Char] -> t -> ShowS
formatTimeS [Char]
spec t
t = [Char] -> ShowS
go [Char]
spec
where
format :: Char -> ShowS
format = t -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime t
t (\Char
c [Char]
s -> Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: Char
c Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
s)
go :: [Char] -> ShowS
go [Char]
s = case [Char]
s of
Char
'%' : Char
c : [Char]
rest -> case Char
c of
Char
'c' -> [Char] -> ShowS
go (TimeLocale -> [Char]
dateTimeFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rest)
Char
'r' -> [Char] -> ShowS
go (TimeLocale -> [Char]
time12Fmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rest)
Char
'X' -> [Char] -> ShowS
go (TimeLocale -> [Char]
timeFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rest)
Char
'x' -> [Char] -> ShowS
go (TimeLocale -> [Char]
dateFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rest)
Char
'-' -> [Char] -> ShowS
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
Char
'_' -> [Char] -> ShowS
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
Char
'0' -> [Char] -> ShowS
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
Char
'^' -> [Char] -> ShowS
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
Char
'#' -> [Char] -> ShowS
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
Char
'%' -> (:) Char
'%' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
go [Char]
rest
Char
_ -> Char -> ShowS
format Char
c ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
go [Char]
rest
Char
c : [Char]
rest -> (:) Char
c ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
go [Char]
rest
[] -> ShowS
forall a. a -> a
id
where
l :: TimeLocale
l = TimeLocale
defaultTimeLocale
{-# INLINEABLE formatTimeS #-}
instance FormatTime TimeOfDay where
showsTime :: TimeOfDay -> (Char -> ShowS) -> Char -> ShowS
showsTime (TimeOfDay Int
h Int
m (NominalDiffTime Micros
s)) = \ Char -> ShowS
def Char
c -> case Char
c of
Char
'R' -> Int -> ShowS
shows02 Int
h ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
m
Char
'T' -> Int -> ShowS
shows02 Int
h ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
m ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
':' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
si
Char
'P' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS) -> [Char] -> ShowS
forall a b. (a -> b) -> a -> b
$ Char -> Char
toLower (Char -> Char) -> ShowS
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 ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst ([Char], [Char])
amPm else ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd ([Char], [Char])
amPm
Char
'p' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS) -> [Char] -> ShowS
forall a b. (a -> b) -> a -> b
$ if Int
h Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
12 then ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst ([Char], [Char])
amPm else ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd ([Char], [Char])
amPm
Char
'H' -> Int -> ShowS
shows02 Int
h
Char
'I' -> Int -> ShowS
shows02 (Int -> ShowS) -> Int -> ShowS
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 -> ShowS
shows_2 Int
h
Char
'l' -> Int -> ShowS
shows_2 (Int -> ShowS) -> Int -> ShowS
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 -> ShowS
shows02 Int
m
Char
'S' -> Int -> ShowS
shows02 Int
si
Char
'q' -> Micros -> ShowS
fills06 Micros
su ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> ShowS
forall a. Show a => a -> ShowS
shows Micros
su ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"000000"
Char
'v' -> Micros -> ShowS
fills06 Micros
su ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> ShowS
forall a. Show a => a -> ShowS
shows Micros
su
Char
'Q' -> if Micros
su Micros -> Micros -> Bool
forall a. Eq a => a -> a -> Bool
== Micros
0 then ShowS
forall a. a -> a
id else (:) Char
'.' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> ShowS
fills06 Micros
su ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> ShowS
drops0 Micros
su
Char
_ -> Char -> ShowS
def Char
c
where
(Micros -> Int
forall a b. (Integral a, Num b) => a -> b
fromIntegral -> Int
si, Micros
su) = Micros -> Micros -> (Micros, Micros)
forall a. Integral a => a -> a -> (a, a)
quotRem Micros
s Micros
1000000
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
months :: [([Char], [Char])]
wDays :: [([Char], [Char])]
amPm :: ([Char], [Char])
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime SundayWeek where
showsTime :: SundayWeek -> (Char -> ShowS) -> Char -> ShowS
showsTime (SundayWeek Int
y Int
w Int
d) = \ Char -> ShowS
def Char
c -> case Char
c of
Char
'Y' -> Int -> ShowS
showsYear Int
y
Char
'y' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'U' -> Int -> ShowS
shows02 Int
w
Char
'u' -> Int -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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 -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> ShowS
def Char
c
where
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
amPm :: ([Char], [Char])
months :: [([Char], [Char])]
wDays :: [([Char], [Char])]
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime MondayWeek where
showsTime :: MondayWeek -> (Char -> ShowS) -> Char -> ShowS
showsTime (MondayWeek Int
y Int
w Int
d) = \ Char -> ShowS
def Char
c -> case Char
c of
Char
'Y' -> Int -> ShowS
showsYear Int
y
Char
'y' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'W' -> Int -> ShowS
shows02 Int
w
Char
'u' -> Int -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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 -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> ShowS
def Char
c
where
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
amPm :: ([Char], [Char])
months :: [([Char], [Char])]
wDays :: [([Char], [Char])]
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime WeekDate where
showsTime :: WeekDate -> (Char -> ShowS) -> Char -> ShowS
showsTime (WeekDate Int
y Int
w Int
d) = \ Char -> ShowS
def Char
c -> case Char
c of
Char
'G' -> Int -> ShowS
showsYear Int
y
Char
'g' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'f' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'V' -> Int -> ShowS
shows02 Int
w
Char
'u' -> Int -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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 -> ShowS
forall a. Show a => a -> ShowS
shows (Int -> ShowS) -> Int -> ShowS
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' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
'a' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
wDays [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
d Int
7
Char
_ -> Char -> ShowS
def Char
c
where
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
amPm :: ([Char], [Char])
months :: [([Char], [Char])]
wDays :: [([Char], [Char])]
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime YearMonthDay where
showsTime :: YearMonthDay -> (Char -> ShowS) -> Char -> ShowS
showsTime (YearMonthDay Int
y Int
m Int
d) Char -> ShowS
def Char
c = case Char
c of
Char
'D' -> Int -> ShowS
shows02 Int
m ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'/' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
d ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'/' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'F' -> Int -> ShowS
showsYear Int
y ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'-' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
m ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (:) Char
'-' ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> ShowS
shows02 Int
d
Char
'Y' -> Int -> ShowS
showsYear Int
y
Char
'y' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'B' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'b' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'h' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'm' -> Int -> ShowS
shows02 Int
m
Char
'd' -> Int -> ShowS
shows02 Int
d
Char
'e' -> Int -> ShowS
shows_2 Int
d
Char
_ -> Char -> ShowS
def Char
c
where
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
amPm :: ([Char], [Char])
wDays :: [([Char], [Char])]
months :: [([Char], [Char])]
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime MonthDay where
showsTime :: MonthDay -> (Char -> ShowS) -> Char -> ShowS
showsTime (MonthDay Int
m Int
d) Char -> ShowS
def Char
c = case Char
c of
Char
'B' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'b' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'h' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) ([Char] -> ShowS)
-> (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> ShowS) -> ([Char], [Char]) -> ShowS
forall a b. (a -> b) -> a -> b
$ [([Char], [Char])]
months [([Char], [Char])] -> Int -> ([Char], [Char])
forall a. [a] -> Int -> a
!! (Int
m Int -> Int -> Int
forall a. Num a => a -> a -> a
- Int
1)
Char
'm' -> Int -> ShowS
shows02 Int
m
Char
'd' -> Int -> ShowS
shows02 Int
d
Char
'e' -> Int -> ShowS
shows_2 Int
d
Char
_ -> Char -> ShowS
def Char
c
where
TimeLocale {[Char]
[([Char], [Char])]
([Char], [Char])
time12Fmt :: [Char]
timeFmt :: [Char]
dateFmt :: [Char]
dateTimeFmt :: [Char]
amPm :: ([Char], [Char])
wDays :: [([Char], [Char])]
months :: [([Char], [Char])]
amPm :: TimeLocale -> ([Char], [Char])
months :: TimeLocale -> [([Char], [Char])]
wDays :: TimeLocale -> [([Char], [Char])]
dateFmt :: TimeLocale -> [Char]
timeFmt :: TimeLocale -> [Char]
time12Fmt :: TimeLocale -> [Char]
dateTimeFmt :: TimeLocale -> [Char]
..} = TimeLocale
defaultTimeLocale
{-# INLINEABLE showsTime #-}
instance FormatTime OrdinalDate where
showsTime :: OrdinalDate -> (Char -> ShowS) -> Char -> ShowS
showsTime (OrdinalDate Int
y Int
d) Char -> ShowS
def Char
c = case Char
c of
Char
'Y' -> Int -> ShowS
showsYear Int
y
Char
'y' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod Int
y Int
100)
Char
'C' -> Int -> ShowS
shows02 (Int -> Int -> Int
forall a. Integral a => a -> a -> a
div Int
y Int
100)
Char
'j' -> Int -> ShowS
shows03 Int
d
Char
_ -> Char -> ShowS
def Char
c
{-# INLINEABLE showsTime #-}
instance FormatTime ModifiedJulianDay where
showsTime :: ModifiedJulianDay -> (Char -> ShowS) -> Char -> ShowS
showsTime d :: ModifiedJulianDay
d@(ModifiedJulianDay -> OrdinalDate
toOrdinalDate -> OrdinalDate
ordinal)
= OrdinalDate -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime OrdinalDate
ordinal
((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. YearMonthDay -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (OrdinalDate -> YearMonthDay
ymdFromOrdinal OrdinalDate
ordinal)
((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. WeekDate -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (OrdinalDate -> ModifiedJulianDay -> WeekDate
toWeekOrdinal OrdinalDate
ordinal ModifiedJulianDay
d)
((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. SundayWeek -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (OrdinalDate -> ModifiedJulianDay -> SundayWeek
toSundayOrdinal OrdinalDate
ordinal ModifiedJulianDay
d)
((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. MondayWeek -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (OrdinalDate -> ModifiedJulianDay -> MondayWeek
toMondayOrdinal OrdinalDate
ordinal ModifiedJulianDay
d)
{-# INLINEABLE showsTime #-}
instance FormatTime ModifiedJulianDate where
showsTime :: ModifiedJulianDate -> (Char -> ShowS) -> Char -> ShowS
showsTime (ModifiedJulianDate ModifiedJulianDay
d NominalDiffTime
dt) =
ModifiedJulianDay -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime ModifiedJulianDay
d ((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeOfDay -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (NominalDiffTime -> TimeOfDay
timeOfDayFromNominalDiffTime NominalDiffTime
dt)
{-# INLINEABLE showsTime #-}
instance FormatTime UTCTime where
showsTime :: UTCTime -> (Char -> ShowS) -> Char -> ShowS
showsTime UTCTime
t Char -> ShowS
def Char
c = case Char
c of
Char
's' -> Micros -> ShowS
forall a. Show a => a -> ShowS
shows (Micros -> ShowS)
-> ((Micros, Micros) -> Micros) -> (Micros, Micros) -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Micros, Micros) -> Micros
forall a b. (a, b) -> a
fst ((Micros, Micros) -> ShowS) -> (Micros, Micros) -> ShowS
forall a b. (a -> b) -> a -> b
$ Micros -> Micros -> (Micros, Micros)
forall a. Integral a => a -> a -> (a, a)
quotRem (UTCTime -> Micros
toPosixTimestampMicros UTCTime
t) Micros
1000000
Char
_ -> (ModifiedJulianDate -> (Char -> ShowS) -> Char -> ShowS
forall t. FormatTime t => t -> (Char -> ShowS) -> Char -> ShowS
showsTime (UTCTime -> ModifiedJulianDate
toModifiedJulianDate UTCTime
t) ((Char -> ShowS) -> Char -> ShowS)
-> ((Char -> ShowS) -> Char -> ShowS)
-> (Char -> ShowS)
-> Char
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> ShowS) -> Char -> ShowS
formatUtcZone) Char -> ShowS
def Char
c
{-# INLINEABLE showsTime #-}
formatUtcZone :: (Char -> ShowS) -> Char -> ShowS
formatUtcZone :: (Char -> ShowS) -> Char -> ShowS
formatUtcZone Char -> ShowS
def Char
c = case Char
c of
Char
'z' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"+0000"
Char
'N' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"+00:00"
Char
'Z' -> [Char] -> ShowS
forall a. [a] -> [a] -> [a]
(++) [Char]
"UTC"
Char
_ -> Char -> ShowS
def Char
c
{-# INLINEABLE formatUtcZone #-}
utf8Char :: Char -> S.ByteString
utf8Char :: Char -> ByteString
utf8Char = ByteString -> ByteString
L.toStrict (ByteString -> ByteString)
-> (Char -> ByteString) -> Char -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> ByteString
B.toLazyByteString (Builder -> ByteString) -> (Char -> Builder) -> Char -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Char -> Builder
B.charUtf8
{-# INLINE utf8Char #-}
utf8String :: String -> S.ByteString
utf8String :: [Char] -> ByteString
utf8String = ByteString -> ByteString
L.toStrict (ByteString -> ByteString)
-> ([Char] -> ByteString) -> [Char] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Builder -> ByteString
B.toLazyByteString (Builder -> ByteString)
-> ([Char] -> Builder) -> [Char] -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Builder
B.stringUtf8
{-# INLINE utf8String #-}
parserToReadS :: Parser a -> ReadS a
parserToReadS :: Parser a -> ReadS a
parserToReadS = (ByteString -> Result a) -> ReadS a
forall a. (ByteString -> Result a) -> ReadS a
go ((ByteString -> Result a) -> ReadS a)
-> (Parser a -> ByteString -> Result a) -> Parser a -> ReadS a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser a -> ByteString -> Result a
forall a. Parser a -> ByteString -> Result a
P.parse
where
go :: (S.ByteString -> Result a) -> ReadS a
go :: (ByteString -> Result a) -> ReadS a
go ByteString -> Result a
k (Int -> [Char] -> ([Char], [Char])
forall a. Int -> [a] -> ([a], [a])
splitAt Int
32 -> ([Char]
h, [Char]
t)) = case ByteString -> Result a
k ([Char] -> ByteString
utf8String [Char]
h) of
Fail ByteString
rest [[Char]]
cxts [Char]
msg -> ReadS a
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ReadS a -> ReadS a
forall a b. (a -> b) -> a -> b
$ [[Char]] -> [Char]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat [ [Char]
"parserToReadS: ", [Char]
msg
, [Char]
"; remaining: ", ShowS
forall a. Show a => a -> [Char]
show (ByteString -> [Char]
utf8Decode ByteString
rest), [Char]
"; stack: ", [[Char]] -> [Char]
forall a. Show a => a -> [Char]
show [[Char]]
cxts ]
Partial ByteString -> Result a
k' -> (ByteString -> Result a) -> ReadS a
forall a. (ByteString -> Result a) -> ReadS a
go ByteString -> Result a
k' [Char]
t
Done ByteString
rest a
a -> (a, [Char]) -> [(a, [Char])]
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, ByteString -> [Char]
utf8Decode ByteString
rest [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
t)
{-# INLINEABLE go #-}
utf8Decode :: S.ByteString -> String
utf8Decode :: ByteString -> [Char]
utf8Decode = Text -> [Char]
Text.unpack (Text -> [Char]) -> (ByteString -> Text) -> ByteString -> [Char]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ByteString -> Text
Text.decodeUtf8
{-# INLINE utf8Decode #-}
{-# INLINEABLE parserToReadS #-}
indexOfCI :: [String] -> Parser Int
indexOfCI :: [[Char]] -> Parser Int
indexOfCI = [Parser Int] -> Parser Int
forall (f :: * -> *) a. Alternative f => [f a] -> f a
P.choice ([Parser Int] -> Parser Int)
-> ([[Char]] -> [Parser Int]) -> [[Char]] -> Parser Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> [Char] -> Parser Int) -> [Int] -> [[Char]] -> [Parser Int]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (\Int
i [Char]
s -> Int
i Int -> Parser ByteString () -> Parser Int
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Char] -> Parser ByteString ()
stringCI [Char]
s) [Int
0..]
{-# INLINE indexOfCI #-}
stringCI :: String -> Parser ()
stringCI :: [Char] -> Parser ByteString ()
stringCI = (Parser ByteString () -> Char -> Parser ByteString ())
-> Parser ByteString () -> [Char] -> Parser ByteString ()
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (\Parser ByteString ()
p Char
c -> Parser ByteString ()
p Parser ByteString ()
-> Parser ByteString () -> Parser ByteString ()
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> Char -> Parser ByteString ()
charCI Char
c) (() -> Parser ByteString ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ())
{-# INLINE stringCI #-}
charCI :: Char -> Parser ()
charCI :: Char -> Parser ByteString ()
charCI Char
c = if Char
u Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
l then Char -> Parser ByteString ()
charU8 Char
c else Char -> Parser ByteString ()
charU8 Char
l Parser ByteString ()
-> Parser ByteString () -> Parser ByteString ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Char -> Parser ByteString ()
charU8 Char
u
where
l :: Char
l = Char -> Char
toLower Char
c
u :: Char
u = Char -> Char
toUpper Char
c
{-# INLINE charCI #-}
charU8 :: Char -> Parser ()
charU8 :: Char -> Parser ByteString ()
charU8 Char
c = () () -> Parser ByteString ByteString -> Parser ByteString ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> Parser ByteString ByteString
P.string (Char -> ByteString
utf8Char Char
c)
{-# INLINE charU8 #-}
negative :: (Integral n) => Parser n -> Parser n
negative :: Parser n -> Parser n
negative Parser n
p = (n -> n) -> n -> n
forall a b. (a -> b) -> a -> b
($) ((n -> n) -> n -> n)
-> Parser ByteString (n -> n) -> Parser ByteString (n -> n)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> (n -> n
forall a. Num a => a -> a
negate (n -> n) -> Parser ByteString Char -> Parser ByteString (n -> n)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> Parser ByteString Char
P.char Char
'-' Parser ByteString (n -> n)
-> Parser ByteString (n -> n) -> Parser ByteString (n -> n)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (n -> n) -> Parser ByteString (n -> n)
forall (f :: * -> *) a. Applicative f => a -> f a
pure n -> n
forall a. a -> a
id) Parser ByteString (n -> n) -> Parser n -> Parser n
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser n
p
{-# INLINE negative #-}
dec0 :: Int -> Parser Int
dec0 :: Int -> Parser Int
dec0 Int
n = ([Char] -> Parser Int)
-> (Int -> Parser Int) -> Either [Char] Int -> Parser Int
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> Parser Int
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail Int -> Parser Int
forall (m :: * -> *) a. Monad m => a -> m a
return (Either [Char] Int -> Parser Int)
-> (ByteString -> Either [Char] Int) -> ByteString -> Parser Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Int -> ByteString -> Either [Char] Int
forall a. Parser a -> ByteString -> Either [Char] a
P.parseOnly Parser Int
forall a. Integral a => Parser a
P.decimal (ByteString -> Parser Int)
-> Parser ByteString ByteString -> Parser Int
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< Int -> Parser ByteString ByteString
P.take Int
n
{-# INLINE dec0 #-}
dec_ :: Int -> Parser Int
dec_ :: Int -> Parser Int
dec_ Int
n = Int -> Parser ByteString ByteString
P.take Int
n Parser ByteString ByteString
-> (ByteString -> Parser Int) -> Parser Int
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ([Char] -> Parser Int)
-> (Int -> Parser Int) -> Either [Char] Int -> Parser Int
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> Parser Int
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail Int -> Parser Int
forall (m :: * -> *) a. Monad m => a -> m a
return
(Either [Char] Int -> Parser Int)
-> (ByteString -> Either [Char] Int) -> ByteString -> Parser Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser Int -> ByteString -> Either [Char] Int
forall a. Parser a -> ByteString -> Either [Char] a
P.parseOnly Parser Int
forall a. Integral a => Parser a
P.decimal
(ByteString -> Either [Char] Int)
-> (ByteString -> ByteString) -> ByteString -> Either [Char] Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> ByteString -> ByteString
S.dropWhile Char -> Bool
isSpace
{-# INLINE dec_ #-}
data TimeZone = TimeZone
{ TimeZone -> Int
_timeZoneMinutes :: {-# UNPACK #-} !Minutes
, TimeZone -> Bool
_timeZoneSummerOnly :: !Bool
, TimeZone -> [Char]
_timeZoneName :: String
}
timeZoneMinutes :: Lens' TimeZone Minutes
timeZoneMinutes :: (Int -> f Int) -> TimeZone -> f TimeZone
timeZoneMinutes = (TimeZone -> Int)
-> (TimeZone -> Int -> TimeZone) -> Lens TimeZone TimeZone Int Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeZone -> Int
_timeZoneMinutes ((TimeZone -> Int -> TimeZone) -> Lens TimeZone TimeZone Int Int)
-> (TimeZone -> Int -> TimeZone) -> Lens TimeZone TimeZone Int Int
forall a b. (a -> b) -> a -> b
$ \TimeZone
a Int
b -> TimeZone
a { _timeZoneMinutes :: Int
_timeZoneMinutes = Int
b }
{-# INLINE timeZoneMinutes #-}
utc :: TimeZone
utc :: TimeZone
utc = Int -> Bool -> [Char] -> TimeZone
TimeZone Int
0 Bool
False [Char]
"UTC"
timeZoneOffset :: TimeZone -> NominalDiffTime
timeZoneOffset :: TimeZone -> NominalDiffTime
timeZoneOffset = Micros -> NominalDiffTime
fromMicroseconds (Micros -> NominalDiffTime)
-> (TimeZone -> Micros) -> TimeZone -> NominalDiffTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Micros
forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int -> Micros) -> (TimeZone -> Int) -> TimeZone -> Micros
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int -> Int
forall a. Num a => a -> a -> a
(*) Int
60000000 (Int -> Int) -> (TimeZone -> Int) -> TimeZone -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Int -> Int
forall a. Num a => a -> a
negate (Int -> Int) -> (TimeZone -> Int) -> TimeZone -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. TimeZone -> Int
_timeZoneMinutes
{-# INLINE timeZoneOffset #-}
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
enumFromThenTo :: TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag]
$cenumFromThenTo :: TimeFlag -> TimeFlag -> TimeFlag -> [TimeFlag]
enumFromTo :: TimeFlag -> TimeFlag -> [TimeFlag]
$cenumFromTo :: TimeFlag -> TimeFlag -> [TimeFlag]
enumFromThen :: TimeFlag -> TimeFlag -> [TimeFlag]
$cenumFromThen :: TimeFlag -> TimeFlag -> [TimeFlag]
enumFrom :: TimeFlag -> [TimeFlag]
$cenumFrom :: TimeFlag -> [TimeFlag]
fromEnum :: TimeFlag -> Int
$cfromEnum :: TimeFlag -> Int
toEnum :: Int -> TimeFlag
$ctoEnum :: Int -> TimeFlag
pred :: TimeFlag -> TimeFlag
$cpred :: TimeFlag -> TimeFlag
succ :: TimeFlag -> TimeFlag
$csucc :: TimeFlag -> TimeFlag
Enum, Int -> TimeFlag -> ShowS
[TimeFlag] -> ShowS
TimeFlag -> [Char]
(Int -> TimeFlag -> ShowS)
-> (TimeFlag -> [Char]) -> ([TimeFlag] -> ShowS) -> Show TimeFlag
forall a.
(Int -> a -> ShowS) -> (a -> [Char]) -> ([a] -> ShowS) -> Show a
showList :: [TimeFlag] -> ShowS
$cshowList :: [TimeFlag] -> ShowS
show :: TimeFlag -> [Char]
$cshow :: TimeFlag -> [Char]
showsPrec :: Int -> TimeFlag -> ShowS
$cshowsPrec :: Int -> TimeFlag -> ShowS
Show)
data TimeParse = TimeParse
{ TimeParse -> Int
_tpCentury :: {-# UNPACK #-} !Century
, 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 #-} !Second
, TimeParse -> NominalDiffTime
_tpSecFrac :: {-# UNPACK #-} !NominalDiffTime
, TimeParse -> NominalDiffTime
_tpPOSIXTime :: {-# UNPACK #-} !NominalDiffTime
, TimeParse -> TimeZone
_tpTimeZone :: !TimeZone
}
flag :: TimeFlag -> Lens' TimeParse Bool
flag :: TimeFlag -> Lens' TimeParse Bool
flag (TimeFlag -> Int
forall a. Enum a => a -> Int
fromEnum -> Int
f) = (Int -> f Int) -> TimeParse -> f TimeParse
Lens' TimeParse Int
tpFlags ((Int -> f Int) -> TimeParse -> f TimeParse)
-> ((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)
{-# INLINE flag #-}
tpYear :: TimeParse -> Year
tpYear :: TimeParse -> Int
tpYear TimeParse
tp = TimeParse -> Int
_tpCenturyYear TimeParse
tp 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 TimeParse -> Int
_tpCentury TimeParse
tp
else if TimeParse -> Int
_tpCenturyYear TimeParse
tp Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
69
then Int
20
else Int
19
{-# INLINE tpYear #-}
timeParser :: String -> Parser TimeParse
timeParser :: [Char] -> Parser TimeParse
timeParser = (StateT TimeParse Parser () -> TimeParse -> Parser TimeParse)
-> TimeParse -> StateT TimeParse Parser () -> Parser TimeParse
forall a b c. (a -> b -> c) -> b -> a -> c
flip StateT TimeParse Parser () -> TimeParse -> Parser TimeParse
forall (m :: * -> *) s a. Monad m => StateT s m a -> s -> m s
execStateT TimeParse
unixEpoch (StateT TimeParse Parser () -> Parser TimeParse)
-> ([Char] -> StateT TimeParse Parser ())
-> [Char]
-> Parser TimeParse
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> StateT TimeParse Parser ()
go
where
go :: String -> StateT TimeParse Parser ()
go :: [Char] -> StateT TimeParse Parser ()
go [Char]
spec = case [Char]
spec of
Char
'%' : Char
cspec : [Char]
rspec -> case Char
cspec of
Char
'c' -> [Char] -> StateT TimeParse Parser ()
go (TimeLocale -> [Char]
dateTimeFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'r' -> [Char] -> StateT TimeParse Parser ()
go (TimeLocale -> [Char]
time12Fmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'X' -> [Char] -> StateT TimeParse Parser ()
go (TimeLocale -> [Char]
timeFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'x' -> [Char] -> StateT TimeParse Parser ()
go (TimeLocale -> [Char]
dateFmt TimeLocale
l [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'R' -> [Char] -> StateT TimeParse Parser ()
go ([Char]
"%H:%M" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'T' -> [Char] -> StateT TimeParse Parser ()
go ([Char]
"%H:%M:%S" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'D' -> [Char] -> StateT TimeParse Parser ()
go ([Char]
"%m/%d/%y" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'F' -> [Char] -> StateT TimeParse Parser ()
go ([Char]
"%Y-%m-%d" [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ [Char]
rspec)
Char
'P' -> StateT TimeParse Parser ()
dayHalf
Char
'p' -> StateT TimeParse Parser ()
dayHalf
Char
'H' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour24
Char
'I' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour12
Char
'k' -> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour24)
StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour24)
Char
'l' -> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour12)
StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setHour12)
Char
'M' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpMinute StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'S' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpSecond StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'q' -> Parser ByteString Micros -> StateT TimeParse Parser Micros
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser ByteString Micros
micro StateT TimeParse Parser Micros
-> (Micros -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
-> NominalDiffTime -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
Lens' TimeParse NominalDiffTime
tpSecFrac (NominalDiffTime -> StateT TimeParse Parser ())
-> (Micros -> NominalDiffTime)
-> Micros
-> StateT TimeParse Parser ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> NominalDiffTime
NominalDiffTime StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'v' -> Parser ByteString Micros -> StateT TimeParse Parser Micros
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser ByteString Micros
micro StateT TimeParse Parser Micros
-> (Micros -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
-> NominalDiffTime -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
Lens' TimeParse NominalDiffTime
tpSecFrac (NominalDiffTime -> StateT TimeParse Parser ())
-> (Micros -> NominalDiffTime)
-> Micros
-> StateT TimeParse Parser ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Micros -> NominalDiffTime
NominalDiffTime StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'Q' -> Parser ByteString NominalDiffTime
-> StateT TimeParse Parser NominalDiffTime
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ((Char -> Parser ByteString Char
P.char Char
'.' Parser ByteString Char
-> Parser ByteString NominalDiffTime
-> Parser ByteString NominalDiffTime
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Micros -> NominalDiffTime
NominalDiffTime (Micros -> NominalDiffTime)
-> Parser ByteString Micros -> Parser ByteString NominalDiffTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser ByteString Micros
micro) Parser ByteString NominalDiffTime
-> Parser ByteString NominalDiffTime
-> Parser ByteString NominalDiffTime
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> NominalDiffTime -> Parser ByteString NominalDiffTime
forall (m :: * -> *) a. Monad m => a -> m a
return NominalDiffTime
forall v. AdditiveGroup v => v
zeroV)
StateT TimeParse Parser NominalDiffTime
-> (NominalDiffTime -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
-> NominalDiffTime -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
Lens' TimeParse NominalDiffTime
tpSecFrac StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'Y' -> StateT TimeParse Parser ()
fullYear
Char
'y' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setCenturyYear
Char
'C' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setCentury
Char
'B' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([[Char]] -> Parser Int
indexOfCI ([[Char]] -> Parser Int) -> [[Char]] -> Parser Int
forall a b. (a -> b) -> a -> b
$ ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeLocale -> [([Char], [Char])]
months TimeLocale
l) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setMonth (Int -> StateT TimeParse Parser ())
-> (Int -> Int) -> Int -> StateT TimeParse Parser ()
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 Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([[Char]] -> Parser Int
indexOfCI ([[Char]] -> Parser Int) -> [[Char]] -> Parser Int
forall a b. (a -> b) -> a -> b
$ ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeLocale -> [([Char], [Char])]
months TimeLocale
l) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setMonth (Int -> StateT TimeParse Parser ())
-> (Int -> Int) -> Int -> StateT TimeParse Parser ()
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 Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([[Char]] -> Parser Int
indexOfCI ([[Char]] -> Parser Int) -> [[Char]] -> Parser Int
forall a b. (a -> b) -> a -> b
$ ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeLocale -> [([Char], [Char])]
months TimeLocale
l) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setMonth (Int -> StateT TimeParse Parser ())
-> (Int -> Int) -> Int -> StateT TimeParse Parser ()
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 Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setMonth
Char
'd' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfMonth
Char
'e' -> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfMonth)
StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> (Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec_ Int
1) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfMonth)
Char
'j' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
3) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpDayOfYear
StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsOrdinalDate ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'G' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> StateT TimeParse Parser ()
fullYear
Char
'g' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser Int -> StateT TimeParse Parser Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setCenturyYear
Char
'f' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser Int -> StateT TimeParse Parser Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setCentury
Char
'V' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsWeekDate ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser Int -> StateT TimeParse Parser Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setWeekOfYear
Char
'U' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsSundayWeek ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser Int -> StateT TimeParse Parser Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setWeekOfYear
Char
'W' -> TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsMondayWeek ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True StateT TimeParse Parser ()
-> StateT TimeParse Parser Int -> StateT TimeParse Parser Int
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setWeekOfYear
Char
'w' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
1) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfWeek
Char
'u' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
1) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfWeek
Char
'A' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([[Char]] -> Parser Int
indexOfCI ([[Char]] -> Parser Int) -> [[Char]] -> Parser Int
forall a b. (a -> b) -> a -> b
$ ([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeLocale -> [([Char], [Char])]
wDays TimeLocale
l) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfWeek
Char
'a' -> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ([[Char]] -> Parser Int
indexOfCI ([[Char]] -> Parser Int) -> [[Char]] -> Parser Int
forall a b. (a -> b) -> a -> b
$ ([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> [Char]) -> [([Char], [Char])] -> [[Char]]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> TimeLocale -> [([Char], [Char])]
wDays TimeLocale
l) StateT TimeParse Parser Int
-> (Int -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Int -> StateT TimeParse Parser ()
setDayOfWeek
Char
'z' -> do StateT TimeParse Parser ()
tzOffset; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'N' -> do StateT TimeParse Parser ()
tzOffset; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'Z' -> do StateT TimeParse Parser ()
tzOffset StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> StateT TimeParse Parser ()
tzName; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
's' -> do
Micros
s <- Parser ByteString Micros -> StateT TimeParse Parser Micros
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser ByteString Micros -> Parser ByteString Micros
forall n. Integral n => Parser n -> Parser n
negative Parser ByteString Micros
forall a. Integral a => Parser a
P.decimal)
ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
Lens' TimeParse NominalDiffTime
tpPOSIXTime ASetter TimeParse TimeParse NominalDiffTime NominalDiffTime
-> NominalDiffTime -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Micros -> NominalDiffTime
fromMicroseconds (Micros
1000000 Micros -> Micros -> Micros
forall a. Num a => a -> a -> a
* Micros
s)
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsPOSIXTime ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
'-' -> [Char] -> StateT TimeParse Parser ()
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rspec)
Char
'_' -> [Char] -> StateT TimeParse Parser ()
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rspec)
Char
'0' -> [Char] -> StateT TimeParse Parser ()
go (Char
'%' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rspec)
Char
'%' -> Parser ByteString Char -> StateT TimeParse Parser Char
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser ByteString Char
P.char Char
'%') StateT TimeParse Parser Char
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
_ -> Parser ByteString () -> StateT TimeParse Parser ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser ByteString () -> StateT TimeParse Parser ())
-> ([Char] -> Parser ByteString ())
-> [Char]
-> StateT TimeParse Parser ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> Parser ByteString ()
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail ([Char] -> StateT TimeParse Parser ())
-> [Char] -> StateT TimeParse Parser ()
forall a b. (a -> b) -> a -> b
$ [Char]
"Unknown format character: " [Char] -> ShowS
forall a. [a] -> [a] -> [a]
++ Char -> [Char]
forall a. Show a => a -> [Char]
show Char
cspec
where
l :: TimeLocale
l = TimeLocale
defaultTimeLocale
dayHalf :: StateT TimeParse Parser ()
dayHalf = do
Bool
pm <- Parser ByteString Bool -> StateT TimeParse Parser Bool
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Parser ByteString Bool -> StateT TimeParse Parser Bool)
-> Parser ByteString Bool -> StateT TimeParse Parser Bool
forall a b. (a -> b) -> a -> b
$ Bool
False Bool -> Parser ByteString () -> Parser ByteString Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Char] -> Parser ByteString ()
stringCI (([Char], [Char]) -> [Char]
forall a b. (a, b) -> a
fst (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> [Char]
forall a b. (a -> b) -> a -> b
$ TimeLocale -> ([Char], [Char])
amPm TimeLocale
l)
Parser ByteString Bool
-> Parser ByteString Bool -> Parser ByteString Bool
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Bool
True Bool -> Parser ByteString () -> Parser ByteString Bool
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ [Char] -> Parser ByteString ()
stringCI (([Char], [Char]) -> [Char]
forall a b. (a, b) -> b
snd (([Char], [Char]) -> [Char]) -> ([Char], [Char]) -> [Char]
forall a b. (a -> b) -> a -> b
$ TimeLocale -> ([Char], [Char])
amPm TimeLocale
l)
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
PostMeridiem ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
pm
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
fullYear :: StateT TimeParse Parser ()
fullYear = Parser Int -> StateT TimeParse Parser ()
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 ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Parser Int -> StateT TimeParse Parser ()
year (Int -> Parser Int
dec0 Int
4)
where
year :: Parser Int -> StateT TimeParse Parser ()
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 Int
-> StateT TimeParse Parser (Int, Int)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser Int
p
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
HasCentury ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpCentury ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
c
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpCenturyYear ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
y
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setHour12 :: Int -> StateT TimeParse Parser ()
setHour12 Int
h = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpHour ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
h
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setHour24 :: Int -> StateT TimeParse Parser ()
setHour24 Int
h = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
False
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpHour ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
h
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setCenturyYear :: Int -> StateT TimeParse Parser ()
setCenturyYear Int
y = do ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpCenturyYear ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
y; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setCentury :: Int -> StateT TimeParse Parser ()
setCentury Int
c = do
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpCentury ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
c
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
HasCentury ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setMonth :: Int -> StateT TimeParse Parser ()
setMonth Int
m = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsGregorian ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpMonth ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
m
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setDayOfMonth :: Int -> StateT TimeParse Parser ()
setDayOfMonth Int
d = do
TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
IsGregorian ((Bool -> Identity Bool) -> TimeParse -> Identity TimeParse)
-> Bool -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Bool
True
ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpDayOfMonth ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
d
[Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setWeekOfYear :: Int -> StateT TimeParse Parser ()
setWeekOfYear Int
w = do ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpWeekOfYear ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
w; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
setDayOfWeek :: Int -> StateT TimeParse Parser ()
setDayOfWeek Int
d = do ASetter TimeParse TimeParse Int Int
Lens' TimeParse Int
tpDayOfWeek ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
.= Int
d; [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
tzOffset :: StateT TimeParse Parser ()
tzOffset = do
Int -> Int
s <- Parser ByteString (Int -> Int)
-> StateT TimeParse Parser (Int -> Int)
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Int
forall a. a -> a
id (Int -> Int)
-> Parser ByteString Char -> Parser ByteString (Int -> Int)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> Parser ByteString Char
P.char Char
'+' Parser ByteString (Int -> Int)
-> Parser ByteString (Int -> Int) -> Parser ByteString (Int -> Int)
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> Int -> Int
forall a. Num a => a -> a
negate (Int -> Int)
-> Parser ByteString Char -> Parser ByteString (Int -> Int)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Char -> Parser ByteString Char
P.char Char
'-')
Int
h <- Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2)
() () -> StateT TimeParse Parser Char -> StateT TimeParse Parser ()
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ByteString Char -> StateT TimeParse Parser Char
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser ByteString Char
P.char Char
':') StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> () -> StateT TimeParse Parser ()
forall (f :: * -> *) a. Applicative f => a -> f a
pure ()
Int
m <- Parser Int -> StateT TimeParse Parser Int
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Int -> Parser Int
dec0 Int
2)
(TimeZone -> Identity TimeZone) -> TimeParse -> Identity TimeParse
Lens' TimeParse TimeZone
tpTimeZone ((TimeZone -> Identity TimeZone)
-> TimeParse -> Identity TimeParse)
-> ((Int -> Identity Int) -> TimeZone -> Identity TimeZone)
-> ASetter TimeParse TimeParse Int Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Int -> Identity Int) -> TimeZone -> Identity TimeZone
Lens TimeZone TimeZone Int Int
timeZoneMinutes ASetter TimeParse TimeParse Int Int
-> Int -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter 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 ()
tzName = Parser ByteString TimeZone -> StateT TimeParse Parser TimeZone
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift Parser ByteString TimeZone
timeZoneParser StateT TimeParse Parser TimeZone
-> (TimeZone -> StateT TimeParse Parser ())
-> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= ((TimeZone -> Identity TimeZone)
-> TimeParse -> Identity TimeParse)
-> TimeZone -> StateT TimeParse Parser ()
forall s (m :: * -> *) a b.
MonadState s m =>
ASetter s s a b -> b -> m ()
assign (TimeZone -> Identity TimeZone) -> TimeParse -> Identity TimeParse
Lens' TimeParse TimeZone
tpTimeZone
Char
c : [Char]
rspec | Char -> Bool
P.isSpace Char
c ->
Parser ByteString ByteString -> StateT TimeParse Parser ByteString
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift ((Char -> Bool) -> Parser ByteString ByteString
P.takeWhile Char -> Bool
P.isSpace) StateT TimeParse Parser ByteString
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go ((Char -> Bool) -> ShowS
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
P.isSpace [Char]
rspec)
Char
c : [Char]
rspec | Char -> Bool
isAscii Char
c -> Parser ByteString Char -> StateT TimeParse Parser Char
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser ByteString Char
P.char Char
c) StateT TimeParse Parser Char
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
Char
c : [Char]
rspec -> Parser ByteString () -> StateT TimeParse Parser ()
forall (t :: (* -> *) -> * -> *) (m :: * -> *) a.
(MonadTrans t, Monad m) =>
m a -> t m a
lift (Char -> Parser ByteString ()
charU8 Char
c) StateT TimeParse Parser ()
-> StateT TimeParse Parser () -> StateT TimeParse Parser ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> [Char] -> StateT TimeParse Parser ()
go [Char]
rspec
[Char]
"" -> () -> StateT TimeParse Parser ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
micro :: Parser Int64
micro :: Parser ByteString Micros
micro = do
Micros
us10 <- ([Char] -> Parser ByteString Micros)
-> (Micros -> Parser ByteString Micros)
-> Either [Char] Micros
-> Parser ByteString Micros
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> Parser ByteString Micros
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail Micros -> Parser ByteString Micros
forall (m :: * -> *) a. Monad m => a -> m a
return (Either [Char] Micros -> Parser ByteString Micros)
-> (ByteString -> Either [Char] Micros)
-> ByteString
-> Parser ByteString Micros
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser ByteString Micros -> ByteString -> Either [Char] Micros
forall a. Parser a -> ByteString -> Either [Char] a
P.parseOnly Parser ByteString Micros
forall a. Integral a => Parser a
P.decimal (ByteString -> Either [Char] Micros)
-> (ByteString -> ByteString) -> ByteString -> Either [Char] Micros
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` [Char] -> ByteString
S.pack [Char]
"000000") (ByteString -> Parser ByteString Micros)
-> Parser ByteString ByteString -> Parser ByteString Micros
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< (Char -> Bool) -> Parser ByteString ByteString
P.takeWhile1 Char -> Bool
P.isDigit
Micros -> Parser ByteString Micros
forall (m :: * -> *) a. Monad m => a -> m a
return (Micros -> Micros -> Micros
forall a. Integral a => a -> a -> a
div (Micros
us10 Micros -> Micros -> Micros
forall a. Num a => a -> a -> a
+ Micros
5) Micros
10)
{-# INLINE micro #-}
unixEpoch :: TimeParse
unixEpoch :: TimeParse
unixEpoch = TimeParse :: Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> Int
-> NominalDiffTime
-> NominalDiffTime
-> TimeZone
-> TimeParse
TimeParse
{ _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 :: NominalDiffTime
_tpSecFrac = NominalDiffTime
forall v. AdditiveGroup v => v
zeroV
, _tpPOSIXTime :: NominalDiffTime
_tpPOSIXTime = NominalDiffTime
forall v. AdditiveGroup v => v
zeroV
, _tpTimeZone :: TimeZone
_tpTimeZone = TimeZone
utc
}
{-# INLINE unixEpoch #-}
{-# INLINEABLE timeParser #-}
parseTime :: String -> String -> Maybe UTCTime
parseTime :: [Char] -> [Char] -> Maybe UTCTime
parseTime [Char]
spec = ([Char] -> Maybe UTCTime)
-> (UTCTime -> Maybe UTCTime)
-> Either [Char] UTCTime
-> Maybe UTCTime
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either (Maybe UTCTime -> [Char] -> Maybe UTCTime
forall a b. a -> b -> a
const Maybe UTCTime
forall a. Maybe a
Nothing) UTCTime -> Maybe UTCTime
forall a. a -> Maybe a
Just
(Either [Char] UTCTime -> Maybe UTCTime)
-> ([Char] -> Either [Char] UTCTime) -> [Char] -> Maybe UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser UTCTime -> ByteString -> Either [Char] UTCTime
forall a. Parser a -> ByteString -> Either [Char] a
P.parseOnly Parser UTCTime
parser (ByteString -> Either [Char] UTCTime)
-> ([Char] -> ByteString) -> [Char] -> Either [Char] UTCTime
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
utf8String
where
parser :: Parser UTCTime
parser = TimeParse -> UTCTime
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> UTCTime)
-> Parser ByteString () -> Parser ByteString (TimeParse -> UTCTime)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ByteString ()
P.skipSpace Parser ByteString (TimeParse -> UTCTime)
-> Parser TimeParse -> Parser UTCTime
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Parser TimeParse
timeParser [Char]
spec
Parser UTCTime -> Parser ByteString () -> Parser UTCTime
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
P.skipSpace Parser UTCTime -> Parser ByteString () -> Parser UTCTime
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
forall t. Chunk t => Parser t ()
P.endOfInput
{-# INLINEABLE parseTime #-}
readTime :: (ParseTime t) => String -> String -> t
readTime :: [Char] -> [Char] -> t
readTime [Char]
spec = ([Char] -> t) -> (t -> t) -> Either [Char] t -> t
forall a c b. (a -> c) -> (b -> c) -> Either a b -> c
either [Char] -> t
forall a. HasCallStack => [Char] -> a
error t -> t
forall a. a -> a
id (Either [Char] t -> t)
-> ([Char] -> Either [Char] t) -> [Char] -> t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Parser t -> ByteString -> Either [Char] t
forall a. Parser a -> ByteString -> Either [Char] a
P.parseOnly Parser t
parser (ByteString -> Either [Char] t)
-> ([Char] -> ByteString) -> [Char] -> Either [Char] t
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [Char] -> ByteString
utf8String
where
parser :: Parser t
parser = TimeParse -> t
forall t. ParseTime t => TimeParse -> t
buildTime (TimeParse -> t)
-> Parser ByteString () -> Parser ByteString (TimeParse -> t)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ByteString ()
P.skipSpace Parser ByteString (TimeParse -> t) -> Parser TimeParse -> Parser t
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Parser TimeParse
timeParser [Char]
spec
Parser t -> Parser ByteString () -> Parser t
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
P.skipSpace Parser t -> Parser ByteString () -> Parser t
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a
<* Parser ByteString ()
forall t. Chunk t => Parser t ()
P.endOfInput
{-# INLINEABLE readTime #-}
readsTime :: (ParseTime t) => String -> ReadS t
readsTime :: [Char] -> ReadS t
readsTime [Char]
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 ByteString () -> Parser ByteString (TimeParse -> t)
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ Parser ByteString ()
P.skipSpace Parser ByteString (TimeParse -> t) -> Parser TimeParse -> Parser t
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Char] -> Parser TimeParse
timeParser [Char]
spec
{-# INLINEABLE readsTime #-}
class ParseTime t where
buildTime :: TimeParse -> t
instance ParseTime TimeOfDay where
buildTime :: TimeParse -> TimeOfDay
buildTime TimeParse
tp = Int -> Int -> NominalDiffTime -> TimeOfDay
TimeOfDay Int
h (TimeParse -> Int
_tpMinute TimeParse
tp)
(Micros -> NominalDiffTime
fromMicroseconds (Micros
1000000 Micros -> Micros -> Micros
forall a. Num a => a -> a -> a
* Int -> Micros
forall a b. (Integral a, Num b) => a -> b
fromIntegral (TimeParse -> Int
_tpSecond TimeParse
tp)) NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall v. AdditiveGroup v => v -> v -> v
^+^ TimeParse -> NominalDiffTime
_tpSecFrac TimeParse
tp)
where
h :: Int
h = if TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
TwelveHour
then if TimeParse
tp TimeParse -> Getting Bool TimeParse Bool -> Bool
forall s a. s -> Getting a s a -> a
^. TimeFlag -> Lens' TimeParse Bool
flag TimeFlag
PostMeridiem
then if TimeParse -> Int
_tpHour TimeParse
tp Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Int
12
then TimeParse -> Int
_tpHour TimeParse
tp Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
12
else TimeParse -> Int
_tpHour TimeParse
tp
else Int -> Int -> Int
forall a. Integral a => a -> a -> a
mod (TimeParse -> Int
_tpHour TimeParse
tp) Int
12
else TimeParse -> Int
_tpHour TimeParse
tp
{-# INLINE buildTime #-}
instance ParseTime YearMonthDay where
buildTime :: TimeParse -> YearMonthDay
buildTime TimeParse
tp = Int -> Int -> Int -> YearMonthDay
YearMonthDay (TimeParse -> Int
tpYear TimeParse
tp) (TimeParse -> Int
_tpMonth TimeParse
tp) (TimeParse -> Int
_tpDayOfMonth TimeParse
tp)
{-# INLINE buildTime #-}
instance ParseTime OrdinalDate where
buildTime :: TimeParse -> OrdinalDate
buildTime TimeParse
tp = Int -> Int -> OrdinalDate
OrdinalDate (TimeParse -> Int
tpYear TimeParse
tp) (TimeParse -> Int
_tpDayOfYear TimeParse
tp)
{-# INLINE buildTime #-}
instance ParseTime WeekDate where
buildTime :: TimeParse -> WeekDate
buildTime TimeParse
tp = Int -> Int -> Int -> WeekDate
WeekDate (TimeParse -> Int
tpYear TimeParse
tp) (TimeParse -> Int
_tpWeekOfYear TimeParse
tp)
(if TimeParse -> Int
_tpDayOfWeek TimeParse
tp Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else TimeParse -> Int
_tpDayOfWeek TimeParse
tp)
{-# INLINE buildTime #-}
instance ParseTime SundayWeek where
buildTime :: TimeParse -> SundayWeek
buildTime TimeParse
tp = Int -> Int -> Int -> SundayWeek
SundayWeek (TimeParse -> Int
tpYear TimeParse
tp) (TimeParse -> Int
_tpWeekOfYear TimeParse
tp)
(if TimeParse -> Int
_tpDayOfWeek TimeParse
tp Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
7 then Int
0 else TimeParse -> Int
_tpDayOfWeek TimeParse
tp)
{-# INLINE buildTime #-}
instance ParseTime MondayWeek where
buildTime :: TimeParse -> MondayWeek
buildTime TimeParse
tp = Int -> Int -> Int -> MondayWeek
MondayWeek (TimeParse -> Int
tpYear TimeParse
tp) (TimeParse -> Int
_tpWeekOfYear TimeParse
tp)
(if TimeParse -> Int
_tpDayOfWeek TimeParse
tp Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
== Int
0 then Int
7 else TimeParse -> Int
_tpDayOfWeek TimeParse
tp)
{-# INLINE buildTime #-}
instance ParseTime ModifiedJulianDay where
{-# INLINE buildTime #-}
buildTime :: TimeParse -> ModifiedJulianDay
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 = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ 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 = YearMonthDay -> ModifiedJulianDay
toGregorian (YearMonthDay -> ModifiedJulianDay)
-> YearMonthDay -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ 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 = WeekDate -> ModifiedJulianDay
fromWeekDate (WeekDate -> ModifiedJulianDay) -> WeekDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ 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 = SundayWeek -> ModifiedJulianDay
fromSundayWeek (SundayWeek -> ModifiedJulianDay)
-> SundayWeek -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ 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 = MondayWeek -> ModifiedJulianDay
fromMondayWeek (MondayWeek -> ModifiedJulianDay)
-> MondayWeek -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ TimeParse -> MondayWeek
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
| Bool
otherwise = OrdinalDate -> ModifiedJulianDay
fromOrdinalDate (OrdinalDate -> ModifiedJulianDay)
-> OrdinalDate -> ModifiedJulianDay
forall a b. (a -> b) -> a -> b
$ TimeParse -> OrdinalDate
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
instance ParseTime TimeZone where
buildTime :: TimeParse -> TimeZone
buildTime = TimeParse -> TimeZone
_tpTimeZone
{-# INLINE buildTime #-}
instance ParseTime UTCTime where
buildTime :: TimeParse -> UTCTime
buildTime TimeParse
tp = 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 Micros -> UTCTime
fromPosixTimestampMicros (Micros -> UTCTime) -> Micros -> UTCTime
forall a b. (a -> b) -> a -> b
$ NominalDiffTime -> Micros
toMicroseconds (NominalDiffTime -> Micros) -> NominalDiffTime -> Micros
forall a b. (a -> b) -> a -> b
$ TimeParse -> NominalDiffTime
_tpPOSIXTime TimeParse
tp
else UTCTime
zoned
where
d :: ModifiedJulianDay
d :: ModifiedJulianDay
d = TimeParse -> ModifiedJulianDay
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
dt :: TimeOfDay
dt :: TimeOfDay
dt = TimeParse -> TimeOfDay
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
tz :: TimeZone
tz :: TimeZone
tz = TimeParse -> TimeZone
forall t. ParseTime t => TimeParse -> t
buildTime TimeParse
tp
jul :: ModifiedJulianDate
jul :: ModifiedJulianDate
jul = ModifiedJulianDay -> NominalDiffTime -> ModifiedJulianDate
ModifiedJulianDate ModifiedJulianDay
d (TimeOfDay -> NominalDiffTime
toDayTime TimeOfDay
dt)
zoned :: UTCTime
zoned :: UTCTime
zoned = ModifiedJulianDate -> UTCTime
fromModifiedJulianDate ModifiedJulianDate
jul UTCTime -> Diff UTCTime -> UTCTime
forall p. AffineSpace p => p -> Diff p -> p
.+^ TimeZone -> NominalDiffTime
timeZoneOffset TimeZone
tz
toDayTime :: TimeOfDay -> NominalDiffTime
toDayTime :: TimeOfDay -> NominalDiffTime
toDayTime (TimeOfDay Int
h Int
m NominalDiffTime
s) = NominalDiffTime
s
NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall v. AdditiveGroup v => v -> v -> v
^+^ Int -> Rational
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
m Scalar NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall v. VectorSpace v => Scalar v -> v -> v
*^ Micros -> NominalDiffTime
NominalDiffTime Micros
60000000
NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall v. AdditiveGroup v => v -> v -> v
^+^ Int -> Rational
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
h Scalar NominalDiffTime -> NominalDiffTime -> NominalDiffTime
forall v. VectorSpace v => Scalar v -> v -> v
*^ Micros -> NominalDiffTime
NominalDiffTime Micros
3600000000
{-# INLINEABLE toDayTime #-}
{-# INLINE buildTime #-}
timeZoneParser :: Parser TimeZone
timeZoneParser :: Parser ByteString TimeZone
timeZoneParser = [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"TAI" Int
0 Bool
False Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"UT1" Int
0 Bool
False
Parser ByteString TimeZone
-> Parser ByteString TimeZone -> Parser ByteString TimeZone
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"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 (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
"ACSST" (Int -> Int -> Int
forall a. Num a => a -> a -> a
($+) Int
10 Int
30) Bool
False
where
zone :: [Char] -> Int -> Bool -> Parser ByteString TimeZone
zone [Char]
name Int
offset Bool
dst = Int -> Bool -> [Char] -> TimeZone
TimeZone Int
offset Bool
dst [Char]
name TimeZone
-> Parser ByteString ByteString -> Parser ByteString TimeZone
forall (f :: * -> *) a b. Functor f => a -> f b -> f a
<$ ByteString -> Parser ByteString ByteString
P.string ([Char] -> ByteString
S.pack [Char]
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)
instance Read UTCTime where
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
$
[Char] -> ReadS UTCTime
forall t. ParseTime t => [Char] -> ReadS t
readsTime [Char]
"%Y-%m-%d %H:%M:%S%Q %Z"
{-# INLINEABLE readsPrec #-}
instance Show UTCTime where
showsPrec :: Int -> UTCTime -> ShowS
showsPrec Int
_ = [Char] -> UTCTime -> ShowS
forall t. FormatTime t => [Char] -> t -> ShowS
formatTimeS [Char]
"%Y-%m-%d %H:%M:%S%Q %Z"
instance Show NominalDiffTime where
showsPrec :: Int -> NominalDiffTime -> ShowS
showsPrec Int
p (NominalDiffTime Micros
a) [Char]
rest = Int -> Micros -> ShowS
forall a. Show a => Int -> a -> ShowS
showsPrec Int
p Micros
a (Char
's' Char -> ShowS
forall a. a -> [a] -> [a]
: [Char]
rest)
instance ToJSON UTCTime where
toJSON :: UTCTime -> Value
toJSON UTCTime
t = Text -> Value
String (Text -> Value) -> Text -> Value
forall a b. (a -> b) -> a -> b
$ [Char] -> Text
T.pack ([Char] -> Text) -> [Char] -> Text
forall a b. (a -> b) -> a -> b
$ [Char] -> UTCTime -> [Char]
forall t. FormatTime t => [Char] -> t -> [Char]
formatTime [Char]
"%FT%T%QZ" UTCTime
t
{-# INLINE toJSON #-}
instance FromJSON UTCTime where
parseJSON :: Value -> Parser UTCTime
parseJSON = [Char] -> (Text -> Parser UTCTime) -> Value -> Parser UTCTime
forall a. [Char] -> (Text -> Parser a) -> Value -> Parser a
withText [Char]
"UTCTime" ((Text -> Parser UTCTime) -> Value -> Parser UTCTime)
-> (Text -> Parser UTCTime) -> Value -> Parser UTCTime
forall a b. (a -> b) -> a -> b
$ \Text
t ->
case [Char] -> [Char] -> Maybe UTCTime
parseTime [Char]
"%FT%T%QZ" (Text -> [Char]
T.unpack Text
t) of
Just UTCTime
d -> UTCTime -> Parser UTCTime
forall (f :: * -> *) a. Applicative f => a -> f a
pure UTCTime
d
Maybe UTCTime
_ -> [Char] -> Parser UTCTime
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
"could not parse ISO-8601 date"
{-# INLINE parseJSON #-}
tpCentury :: Lens' TimeParse Int
tpCentury :: (Int -> f Int) -> TimeParse -> f TimeParse
tpCentury = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpCentury (\TimeParse
a Int
b -> TimeParse
a { _tpCentury :: Int
_tpCentury = Int
b })
{-# INLINE tpCentury #-}
tpCenturyYear :: Lens' TimeParse Int
tpCenturyYear :: (Int -> f Int) -> TimeParse -> f TimeParse
tpCenturyYear = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpCenturyYear (\TimeParse
a Int
b -> TimeParse
a { _tpCenturyYear :: Int
_tpCenturyYear = Int
b })
{-# INLINE tpCenturyYear #-}
tpMonth :: Lens' TimeParse Int
tpMonth :: (Int -> f Int) -> TimeParse -> f TimeParse
tpMonth = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpMonth (\TimeParse
a Int
b -> TimeParse
a { _tpMonth :: Int
_tpMonth = Int
b })
{-# INLINE tpMonth #-}
tpWeekOfYear :: Lens' TimeParse Int
tpWeekOfYear :: (Int -> f Int) -> TimeParse -> f TimeParse
tpWeekOfYear = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpWeekOfYear (\TimeParse
a Int
b -> TimeParse
a { _tpWeekOfYear :: Int
_tpWeekOfYear = Int
b })
{-# INLINE tpWeekOfYear #-}
tpDayOfMonth :: Lens' TimeParse Int
tpDayOfMonth :: (Int -> f Int) -> TimeParse -> f TimeParse
tpDayOfMonth = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpDayOfMonth (\TimeParse
a Int
b -> TimeParse
a { _tpDayOfMonth :: Int
_tpDayOfMonth = Int
b })
{-# INLINE tpDayOfMonth #-}
tpDayOfYear :: Lens' TimeParse Int
tpDayOfYear :: (Int -> f Int) -> TimeParse -> f TimeParse
tpDayOfYear = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpDayOfYear (\TimeParse
a Int
b -> TimeParse
a { _tpDayOfYear :: Int
_tpDayOfYear = Int
b })
{-# INLINE tpDayOfYear #-}
tpDayOfWeek :: Lens' TimeParse Int
tpDayOfWeek :: (Int -> f Int) -> TimeParse -> f TimeParse
tpDayOfWeek = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpDayOfWeek (\TimeParse
a Int
b -> TimeParse
a { _tpDayOfWeek :: Int
_tpDayOfWeek = Int
b })
{-# INLINE tpDayOfWeek #-}
tpFlags :: Lens' TimeParse Int
tpFlags :: (Int -> f Int) -> TimeParse -> f TimeParse
tpFlags = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpFlags (\TimeParse
a Int
b -> TimeParse
a { _tpFlags :: Int
_tpFlags = Int
b })
{-# INLINE tpFlags #-}
tpHour :: Lens' TimeParse Int
tpHour :: (Int -> f Int) -> TimeParse -> f TimeParse
tpHour = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpHour (\TimeParse
a Int
b -> TimeParse
a { _tpHour :: Int
_tpHour = Int
b })
{-# INLINE tpHour #-}
tpMinute :: Lens' TimeParse Int
tpMinute :: (Int -> f Int) -> TimeParse -> f TimeParse
tpMinute = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpMinute (\TimeParse
a Int
b -> TimeParse
a { _tpMinute :: Int
_tpMinute = Int
b })
{-# INLINE tpMinute #-}
tpSecond :: Lens' TimeParse Int
tpSecond :: (Int -> f Int) -> TimeParse -> f TimeParse
tpSecond = (TimeParse -> Int)
-> (TimeParse -> Int -> TimeParse) -> Lens' TimeParse Int
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> Int
_tpSecond (\TimeParse
a Int
b -> TimeParse
a { _tpSecond :: Int
_tpSecond = Int
b })
{-# INLINE tpSecond #-}
tpSecFrac :: Lens' TimeParse NominalDiffTime
tpSecFrac :: (NominalDiffTime -> f NominalDiffTime) -> TimeParse -> f TimeParse
tpSecFrac = (TimeParse -> NominalDiffTime)
-> (TimeParse -> NominalDiffTime -> TimeParse)
-> Lens' TimeParse NominalDiffTime
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> NominalDiffTime
_tpSecFrac (\TimeParse
a NominalDiffTime
b -> TimeParse
a { _tpSecFrac :: NominalDiffTime
_tpSecFrac = NominalDiffTime
b })
{-# INLINE tpSecFrac #-}
tpPOSIXTime :: Lens' TimeParse NominalDiffTime
tpPOSIXTime :: (NominalDiffTime -> f NominalDiffTime) -> TimeParse -> f TimeParse
tpPOSIXTime = (TimeParse -> NominalDiffTime)
-> (TimeParse -> NominalDiffTime -> TimeParse)
-> Lens' TimeParse NominalDiffTime
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> NominalDiffTime
_tpPOSIXTime (\TimeParse
a NominalDiffTime
b -> TimeParse
a { _tpPOSIXTime :: NominalDiffTime
_tpPOSIXTime = NominalDiffTime
b })
{-# INLINE tpPOSIXTime #-}
tpTimeZone :: Lens' TimeParse TimeZone
tpTimeZone :: (TimeZone -> f TimeZone) -> TimeParse -> f TimeParse
tpTimeZone = (TimeParse -> TimeZone)
-> (TimeParse -> TimeZone -> TimeParse) -> Lens' TimeParse TimeZone
forall s a b t. (s -> a) -> (s -> b -> t) -> Lens s t a b
lens TimeParse -> TimeZone
_tpTimeZone (\TimeParse
a TimeZone
b -> TimeParse
a { _tpTimeZone :: TimeZone
_tpTimeZone = TimeZone
b })
{-# INLINE tpTimeZone #-}