{-# LANGUAGE Safe #-}{-# OPTIONS -fno-warn-orphans #-}moduleData.Time.Format.Parse.Instances()whereimportControl.Applicative((<|>))importData.CharimportData.FixedimportData.List(elemIndex,find)importData.RatioimportData.Time.Calendar.CalendarDiffDays importData.Time.Calendar.Days importData.Time.Calendar.Gregorian importData.Time.Calendar.Month importData.Time.Calendar.OrdinalDate importData.Time.Calendar.Private (clipValid )importData.Time.Calendar.WeekDate importData.Time.Clock.Internal.DiffTime importData.Time.Clock.Internal.NominalDiffTime importData.Time.Clock.Internal.UTCTime importData.Time.Clock.Internal.UniversalTime importData.Time.Clock.POSIX importData.Time.Format.Locale importData.Time.Format.Parse.Class importData.Time.LocalTime.Internal.CalendarDiffTime importData.Time.LocalTime.Internal.LocalTime importData.Time.LocalTime.Internal.TimeOfDay importData.Time.LocalTime.Internal.TimeZone importData.Time.LocalTime.Internal.ZonedTime importData.TraversableimportText.Read(readMaybe)dataDayComponent =DCCentury Integer-- century of all years|DCCenturyYear Integer-- 0-99, last two digits of both real years and week years|DCYearMonth MonthOfYear -- 1-12|DCMonthDay DayOfMonth -- 1-31|DCYearDay DayOfYear -- 1-366|DCWeekDay Int-- 1-7 (mon-sun)|DCYearWeek WeekType WeekOfYear -- 1-53 or 0-53dataWeekType =ISOWeek |SundayWeek |MondayWeek makeDayComponent ::TimeLocale ->Char->String->Maybe[DayComponent ]makeDayComponent :: TimeLocale -> Char -> String -> Maybe [DayComponent]
makeDayComponent TimeLocale
l Char
c String
x =letra ::(Reada )=>Maybea ra :: Maybe a
ra =String -> Maybe a
forall a. Read a => String -> Maybe a
readMaybeString
x zeroBasedListIndex ::[String]->MaybeIntzeroBasedListIndex :: [String] -> Maybe Int
zeroBasedListIndex [String]
ss =String -> [String] -> Maybe Int
forall a. Eq a => a -> [a] -> Maybe Int
elemIndex((Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
toUpperString
x )([String] -> Maybe Int) -> [String] -> Maybe Int
forall a b. (a -> b) -> a -> b
$(String -> String) -> [String] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap((Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
toUpper)[String]
ss oneBasedListIndex ::[String]->MaybeIntoneBasedListIndex :: [String] -> Maybe Int
oneBasedListIndex [String]
ss =doInt
index <-[String] -> Maybe Int
zeroBasedListIndex [String]
ss Int -> Maybe Int
forall (m :: * -> *) a. Monad m => a -> m a
return(Int -> Maybe Int) -> Int -> Maybe Int
forall a b. (a -> b) -> a -> b
$Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
index incaseChar
c of-- %C: century (all but the last two digits of the year), 00 - 99Char
'C'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCentury Integer
a ]-- %f century (all but the last two digits of the year), 00 - 99Char
'f'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCentury Integer
a ]-- %Y: yearChar
'Y'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCentury (Integer
a Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`div`Integer
100),Integer -> DayComponent
DCCenturyYear (Integer
a Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`mod`Integer
100)]-- %G: year for Week Date formatChar
'G'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCentury (Integer
a Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`div`Integer
100),Integer -> DayComponent
DCCenturyYear (Integer
a Integer -> Integer -> Integer
forall a. Integral a => a -> a -> a
`mod`Integer
100)]-- %y: last two digits of year, 00 - 99Char
'y'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCenturyYear Integer
a ]-- %g: last two digits of year for Week Date format, 00 - 99Char
'g'->doInteger
a <-Maybe Integer
forall a. Read a => Maybe a
ra [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Integer -> DayComponent
DCCenturyYear Integer
a ]-- %B: month name, long form (fst from months locale), January - DecemberChar
'B'->doInt
a <-[String] -> Maybe Int
oneBasedListIndex ([String] -> Maybe Int) -> [String] -> Maybe Int
forall a b. (a -> b) -> a -> b
$((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(String, String) -> String
forall a b. (a, b) -> a
fst([(String, String)] -> [String]) -> [(String, String)] -> [String]
forall a b. (a -> b) -> a -> b
$TimeLocale -> [(String, String)]
months TimeLocale
l [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCYearMonth Int
a ]-- %b: month name, short form (snd from months locale), Jan - DecChar
'b'->doInt
a <-[String] -> Maybe Int
oneBasedListIndex ([String] -> Maybe Int) -> [String] -> Maybe Int
forall a b. (a -> b) -> a -> b
$((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(String, String) -> String
forall a b. (a, b) -> b
snd([(String, String)] -> [String]) -> [(String, String)] -> [String]
forall a b. (a -> b) -> a -> b
$TimeLocale -> [(String, String)]
months TimeLocale
l [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCYearMonth Int
a ]-- %m: month of year, leading 0 as needed, 01 - 12Char
'm'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
12Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCYearMonth Int
a ]-- %d: day of month, leading 0 as needed, 01 - 31Char
'd'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
31Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCMonthDay Int
a ]-- %e: day of month, leading space as needed, 1 - 31Char
'e'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
31Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCMonthDay Int
a ]-- %V: week for Week Date format, 01 - 53Char
'V'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
53Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[WeekType -> Int -> DayComponent
DCYearWeek WeekType
ISOWeek Int
a ]-- %U: week number of year, where weeks start on Sunday (as sundayStartWeek), 00 - 53Char
'U'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
53Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[WeekType -> Int -> DayComponent
DCYearWeek WeekType
SundayWeek Int
a ]-- %W: week number of year, where weeks start on Monday (as mondayStartWeek), 00 - 53Char
'W'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
53Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[WeekType -> Int -> DayComponent
DCYearWeek WeekType
MondayWeek Int
a ]-- %u: day for Week Date format, 1 - 7Char
'u'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
7Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCWeekDay Int
a ]-- %a: day of week, short form (snd from wDays locale), Sun - SatChar
'a'->doInt
a' <-[String] -> Maybe Int
zeroBasedListIndex ([String] -> Maybe Int) -> [String] -> Maybe Int
forall a b. (a -> b) -> a -> b
$((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(String, String) -> String
forall a b. (a, b) -> b
snd([(String, String)] -> [String]) -> [(String, String)] -> [String]
forall a b. (a -> b) -> a -> b
$TimeLocale -> [(String, String)]
wDays TimeLocale
l leta :: Int
a =ifInt
a' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
0thenInt
7elseInt
a' [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCWeekDay Int
a ]-- %A: day of week, long form (fst from wDays locale), Sunday - SaturdayChar
'A'->doInt
a' <-[String] -> Maybe Int
zeroBasedListIndex ([String] -> Maybe Int) -> [String] -> Maybe Int
forall a b. (a -> b) -> a -> b
$((String, String) -> String) -> [(String, String)] -> [String]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(String, String) -> String
forall a b. (a, b) -> a
fst([(String, String)] -> [String]) -> [(String, String)] -> [String]
forall a b. (a -> b) -> a -> b
$TimeLocale -> [(String, String)]
wDays TimeLocale
l leta :: Int
a =ifInt
a' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
0thenInt
7elseInt
a' [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCWeekDay Int
a ]-- %w: day of week number, 0 (= Sunday) - 6 (= Saturday)Char
'w'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a' <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
6Int
raw leta :: Int
a =ifInt
a' Int -> Int -> Bool
forall a. Eq a => a -> a -> Bool
==Int
0thenInt
7elseInt
a' [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCWeekDay Int
a ]-- %j: day of year for Ordinal Date format, 001 - 366Char
'j'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
366Int
raw [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[Int -> DayComponent
DCYearDay Int
a ]-- unrecognised, pass on to other parsersChar
_->[DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return[]makeDayComponents ::TimeLocale ->[(Char,String)]->Maybe[DayComponent ]makeDayComponents :: TimeLocale -> [(Char, String)] -> Maybe [DayComponent]
makeDayComponents TimeLocale
l [(Char, String)]
pairs =do[[DayComponent]]
components <-[(Char, String)]
-> ((Char, String) -> Maybe [DayComponent])
-> Maybe [[DayComponent]]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
for[(Char, String)]
pairs (((Char, String) -> Maybe [DayComponent])
 -> Maybe [[DayComponent]])
-> ((Char, String) -> Maybe [DayComponent])
-> Maybe [[DayComponent]]
forall a b. (a -> b) -> a -> b
$\(Char
c ,String
x )->TimeLocale -> Char -> String -> Maybe [DayComponent]
makeDayComponent TimeLocale
l Char
c String
x [DayComponent] -> Maybe [DayComponent]
forall (m :: * -> *) a. Monad m => a -> m a
return([DayComponent] -> Maybe [DayComponent])
-> [DayComponent] -> Maybe [DayComponent]
forall a b. (a -> b) -> a -> b
$[[DayComponent]] -> [DayComponent]
forall (t :: * -> *) a. Foldable t => t [a] -> [a]
concat[[DayComponent]]
components safeLast ::a ->[a ]->a safeLast :: a -> [a] -> a
safeLast a
x [a]
xs =[a] -> a
forall a. [a] -> a
last(a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
:[a]
xs )instanceParseTime Day wheresubstituteTimeSpecifier :: Proxy Day -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy Day
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy Day
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy Day
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe Day
buildTime TimeLocale
l [(Char, String)]
pairs =do[DayComponent]
cs <-TimeLocale -> [(Char, String)] -> Maybe [DayComponent]
makeDayComponents TimeLocale
l [(Char, String)]
pairs -- 'Nothing' indicates a parse failure,-- while 'Just []' means no informationlety :: Integer
y =letd :: Integer
d =Integer -> [Integer] -> Integer
forall a. a -> [a] -> a
safeLast Integer
70[Integer
x |DCCenturyYear Integer
x <-[DayComponent]
cs ]c :: Integer
c =Integer -> [Integer] -> Integer
forall a. a -> [a] -> a
safeLast (ifInteger
d Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
>=Integer
69thenInteger
19elseInteger
20)[Integer
x |DCCentury Integer
x <-[DayComponent]
cs ]inInteger
100Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*Integer
c Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
d rest :: [DayComponent] -> Maybe Day
rest (DCYearMonth Int
m :[DayComponent]
_)=letd :: Int
d =Int -> [Int] -> Int
forall a. a -> [a] -> a
safeLast Int
1[Int
x |DCMonthDay Int
x <-[DayComponent]
cs ]inInteger -> Int -> Int -> Maybe Day
fromGregorianValid Integer
y Int
m Int
d rest (DCYearDay Int
d :[DayComponent]
_)=Integer -> Int -> Maybe Day
fromOrdinalDateValid Integer
y Int
d rest (DCYearWeek WeekType
wt Int
w :[DayComponent]
_)=letd :: Int
d =Int -> [Int] -> Int
forall a. a -> [a] -> a
safeLast Int
4[Int
x |DCWeekDay Int
x <-[DayComponent]
cs ]incaseWeekType
wt ofWeekType
ISOWeek ->Integer -> Int -> Int -> Maybe Day
fromWeekDateValid Integer
y Int
w Int
d WeekType
SundayWeek ->Integer -> Int -> Int -> Maybe Day
fromSundayStartWeekValid Integer
y Int
w (Int
d Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod`Int
7)WeekType
MondayWeek ->Integer -> Int -> Int -> Maybe Day
fromMondayStartWeekValid Integer
y Int
w Int
d rest (DayComponent
_:[DayComponent]
xs )=[DayComponent] -> Maybe Day
rest [DayComponent]
xs rest []=[DayComponent] -> Maybe Day
rest [Int -> DayComponent
DCYearMonth Int
1][DayComponent] -> Maybe Day
rest [DayComponent]
cs instanceParseTime Month wheresubstituteTimeSpecifier :: Proxy Month -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy Month
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy Month
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy Month
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe Month
buildTime TimeLocale
l [(Char, String)]
pairs =do[DayComponent]
cs <-TimeLocale -> [(Char, String)] -> Maybe [DayComponent]
makeDayComponents TimeLocale
l [(Char, String)]
pairs -- 'Nothing' indicates a parse failure,-- while 'Just []' means no informationlety :: Integer
y =letd :: Integer
d =Integer -> [Integer] -> Integer
forall a. a -> [a] -> a
safeLast Integer
70[Integer
x |DCCenturyYear Integer
x <-[DayComponent]
cs ]c :: Integer
c =Integer -> [Integer] -> Integer
forall a. a -> [a] -> a
safeLast (ifInteger
d Integer -> Integer -> Bool
forall a. Ord a => a -> a -> Bool
>=Integer
69thenInteger
19elseInteger
20)[Integer
x |DCCentury Integer
x <-[DayComponent]
cs ]inInteger
100Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*Integer
c Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
+Integer
d rest :: [DayComponent] -> Maybe Month
rest (DCYearMonth Int
m :[DayComponent]
_)=Integer -> Int -> Maybe Month
fromYearMonthValid Integer
y Int
m rest (DayComponent
_:[DayComponent]
xs )=[DayComponent] -> Maybe Month
rest [DayComponent]
xs rest []=Integer -> Int -> Maybe Month
fromYearMonthValid Integer
y Int
1[DayComponent] -> Maybe Month
rest [DayComponent]
cs mfoldl ::(Monadm )=>(a ->b ->m a )->m a ->[b ]->m a mfoldl :: (a -> b -> m a) -> m a -> [b] -> m a
mfoldl a -> b -> m a
f =letmf :: m a -> b -> m a
mf m a
ma b
b =doa
a <-m a
ma a -> b -> m a
f a
a b
b in(m a -> b -> m a) -> m a -> [b] -> m a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldlm a -> b -> m a
mf instanceParseTime TimeOfDay wheresubstituteTimeSpecifier :: Proxy TimeOfDay -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy TimeOfDay
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy TimeOfDay
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy TimeOfDay
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe TimeOfDay
buildTime TimeLocale
l =letf :: TimeOfDay -> (Char, String) -> Maybe TimeOfDay
f t :: TimeOfDay
t @(TimeOfDay Int
h Int
m Pico
s )(Char
c ,String
x )=letra ::(Reada )=>Maybea ra :: Maybe a
ra =String -> Maybe a
forall a. Read a => String -> Maybe a
readMaybeString
x getAmPm :: Maybe TimeOfDay
getAmPm =letupx :: String
upx =(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
toUpperString
x (String
amStr ,String
pmStr )=TimeLocale -> (String, String)
amPm TimeLocale
l inifString
upx String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
amStr thenTimeOfDay -> Maybe TimeOfDay
forall a. a -> Maybe a
Just(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay (Int
h Int -> Int -> Int
forall a. Integral a => a -> a -> a
`mod`Int
12)Int
m Pico
s elseifString
upx String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==String
pmStr thenTimeOfDay -> Maybe TimeOfDay
forall a. a -> Maybe a
Just(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay (ifInt
h Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
<Int
12thenInt
h Int -> Int -> Int
forall a. Num a => a -> a -> a
+Int
12elseInt
h )Int
m Pico
s elseMaybe TimeOfDay
forall a. Maybe a
NothingincaseChar
c ofChar
'P'->Maybe TimeOfDay
getAmPm Char
'p'->Maybe TimeOfDay
getAmPm Char
'H'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
23Int
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
a Int
m Pico
s Char
'I'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
12Int
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
a Int
m Pico
s Char
'k'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
23Int
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
a Int
m Pico
s Char
'l'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
1Int
12Int
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
a Int
m Pico
s Char
'M'->doInt
raw <-Maybe Int
forall a. Read a => Maybe a
ra Int
a <-Int -> Int -> Int -> Maybe Int
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Int
0Int
59Int
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
h Int
a Pico
s Char
'S'->doInteger
raw <-Maybe Integer
forall a. Read a => Maybe a
ra Integer
a <-Integer -> Integer -> Integer -> Maybe Integer
forall t. Ord t => t -> t -> t -> Maybe t
clipValid Integer
0Integer
60Integer
raw TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
h Int
m (Integer -> Pico
forall a. Num a => Integer -> a
fromIntegerInteger
a )Char
'q'->doInteger
ps <-(String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybe(String -> Maybe Integer) -> String -> Maybe Integer
forall a b. (a -> b) -> a -> b
$Int -> String -> String
forall a. Int -> [a] -> [a]
takeInt
12(String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$Int -> Char -> String -> String
forall a. Int -> a -> [a] -> [a]
rpad Int
12Char
'0'String
x )Maybe Integer -> Maybe Integer -> Maybe Integer
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
returnInteger
0TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
h Int
m (Integer -> Integer -> Pico
mkPico (Pico -> Integer
forall a b. (RealFrac a, Integral b) => a -> b
floorPico
s )Integer
ps )Char
'Q'->ifString -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
nullString
x thenTimeOfDay -> Maybe TimeOfDay
forall a. a -> Maybe a
JustTimeOfDay
t elsedoInteger
ps <-(String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybe(String -> Maybe Integer) -> String -> Maybe Integer
forall a b. (a -> b) -> a -> b
$Int -> String -> String
forall a. Int -> [a] -> [a]
takeInt
12(String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$Int -> Char -> String -> String
forall a. Int -> a -> [a] -> [a]
rpad Int
12Char
'0'String
x )Maybe Integer -> Maybe Integer -> Maybe Integer
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|>Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
returnInteger
0TimeOfDay -> Maybe TimeOfDay
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeOfDay -> Maybe TimeOfDay) -> TimeOfDay -> Maybe TimeOfDay
forall a b. (a -> b) -> a -> b
$Int -> Int -> Pico -> TimeOfDay
TimeOfDay Int
h Int
m (Integer -> Integer -> Pico
mkPico (Pico -> Integer
forall a b. (RealFrac a, Integral b) => a -> b
floorPico
s )Integer
ps )Char
_->TimeOfDay -> Maybe TimeOfDay
forall a. a -> Maybe a
JustTimeOfDay
t in(TimeOfDay -> (Char, String) -> Maybe TimeOfDay)
-> Maybe TimeOfDay -> [(Char, String)] -> Maybe TimeOfDay
forall (m :: * -> *) a b.
Monad m =>
(a -> b -> m a) -> m a -> [b] -> m a
mfoldl TimeOfDay -> (Char, String) -> Maybe TimeOfDay
f (TimeOfDay -> Maybe TimeOfDay
forall a. a -> Maybe a
JustTimeOfDay
midnight )rpad ::Int->a ->[a ]->[a ]rpad :: Int -> a -> [a] -> [a]
rpad Int
n a
c [a]
xs =[a]
xs [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++Int -> a -> [a]
forall a. Int -> a -> [a]
replicate(Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
-[a] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length[a]
xs )a
c mkPico ::Integer->Integer->PicomkPico :: Integer -> Integer -> Pico
mkPico Integer
i Integer
f =Integer -> Pico
forall a. Num a => Integer -> a
fromIntegerInteger
i Pico -> Pico -> Pico
forall a. Num a => a -> a -> a
+Rational -> Pico
forall a. Fractional a => Rational -> a
fromRational(Integer
f Integer -> Integer -> Rational
forall a. Integral a => a -> a -> Ratio a
%Integer
1000000000000)instanceParseTime LocalTime wheresubstituteTimeSpecifier :: Proxy LocalTime -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy LocalTime
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy LocalTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy LocalTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe LocalTime
buildTime TimeLocale
l [(Char, String)]
xs =Day -> TimeOfDay -> LocalTime
LocalTime (Day -> TimeOfDay -> LocalTime)
-> Maybe Day -> Maybe (TimeOfDay -> LocalTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>(TimeLocale -> [(Char, String)] -> Maybe Day
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs )Maybe (TimeOfDay -> LocalTime)
-> Maybe TimeOfDay -> Maybe LocalTime
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>(TimeLocale -> [(Char, String)] -> Maybe TimeOfDay
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs )enumDiff ::(Enuma )=>a ->a ->IntenumDiff :: a -> a -> Int
enumDiff a
a a
b =(a -> Int
forall a. Enum a => a -> Int
fromEnuma
a )Int -> Int -> Int
forall a. Num a => a -> a -> a
-(a -> Int
forall a. Enum a => a -> Int
fromEnuma
b )getMilZoneHours ::Char->MaybeIntgetMilZoneHours :: Char -> Maybe Int
getMilZoneHours Char
c |Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<Char
'A'=Maybe Int
forall a. Maybe a
NothinggetMilZoneHours Char
c |Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<=Char
'I'=Int -> Maybe Int
forall a. a -> Maybe a
Just(Int -> Maybe Int) -> Int -> Maybe Int
forall a b. (a -> b) -> a -> b
$Int
1Int -> Int -> Int
forall a. Num a => a -> a -> a
+Char -> Char -> Int
forall a. Enum a => a -> a -> Int
enumDiff Char
c Char
'A'getMilZoneHours Char
'J'=Maybe Int
forall a. Maybe a
NothinggetMilZoneHours Char
c |Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<=Char
'M'=Int -> Maybe Int
forall a. a -> Maybe a
Just(Int -> Maybe Int) -> Int -> Maybe Int
forall a b. (a -> b) -> a -> b
$Int
10Int -> Int -> Int
forall a. Num a => a -> a -> a
+Char -> Char -> Int
forall a. Enum a => a -> a -> Int
enumDiff Char
c Char
'K'getMilZoneHours Char
c |Char
c Char -> Char -> Bool
forall a. Ord a => a -> a -> Bool
<=Char
'Y'=Int -> Maybe Int
forall a. a -> Maybe a
Just(Int -> Maybe Int) -> Int -> Maybe Int
forall a b. (a -> b) -> a -> b
$(Char -> Char -> Int
forall a. Enum a => a -> a -> Int
enumDiff Char
'N'Char
c )Int -> Int -> Int
forall a. Num a => a -> a -> a
-Int
1getMilZoneHours Char
'Z'=Int -> Maybe Int
forall a. a -> Maybe a
JustInt
0getMilZoneHours Char
_=Maybe Int
forall a. Maybe a
NothinggetMilZone ::Char->MaybeTimeZone getMilZone :: Char -> Maybe TimeZone
getMilZone Char
c =letyc :: Char
yc =Char -> Char
toUpperChar
c indoInt
hours <-Char -> Maybe Int
getMilZoneHours Char
yc TimeZone -> Maybe TimeZone
forall (m :: * -> *) a. Monad m => a -> m a
return(TimeZone -> Maybe TimeZone) -> TimeZone -> Maybe TimeZone
forall a b. (a -> b) -> a -> b
$Int -> Bool -> String -> TimeZone
TimeZone (Int
hours Int -> Int -> Int
forall a. Num a => a -> a -> a
*Int
60)Bool
False[Char
yc ]getKnownTimeZone ::TimeLocale ->String->MaybeTimeZone getKnownTimeZone :: TimeLocale -> String -> Maybe TimeZone
getKnownTimeZone TimeLocale
locale String
x =(TimeZone -> Bool) -> [TimeZone] -> Maybe TimeZone
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Maybe a
find(\TimeZone
tz ->(Char -> Char) -> String -> String
forall a b. (a -> b) -> [a] -> [b]
mapChar -> Char
toUpperString
x String -> String -> Bool
forall a. Eq a => a -> a -> Bool
==TimeZone -> String
timeZoneName TimeZone
tz )(TimeLocale -> [TimeZone]
knownTimeZones TimeLocale
locale )instanceParseTime TimeZone wheresubstituteTimeSpecifier :: Proxy TimeZone -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy TimeZone
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy TimeZone
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy TimeZone
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe TimeZone
buildTime TimeLocale
l =letf ::Char->String->TimeZone ->MaybeTimeZone f :: Char -> String -> TimeZone -> Maybe TimeZone
f Char
'z'String
str (TimeZone Int
_Bool
dst String
name )|JustInt
offset <-String -> Maybe Int
readTzOffset String
str =TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
Just(TimeZone -> Maybe TimeZone) -> TimeZone -> Maybe TimeZone
forall a b. (a -> b) -> a -> b
$Int -> Bool -> String -> TimeZone
TimeZone Int
offset Bool
dst String
name f Char
'z'String
_TimeZone
_=Maybe TimeZone
forall a. Maybe a
Nothingf Char
'Z'String
str TimeZone
_|JustInt
offset <-String -> Maybe Int
readTzOffset String
str =TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
Just(TimeZone -> Maybe TimeZone) -> TimeZone -> Maybe TimeZone
forall a b. (a -> b) -> a -> b
$Int -> Bool -> String -> TimeZone
TimeZone Int
offset Bool
FalseString
""f Char
'Z'String
str TimeZone
_|JustTimeZone
zone <-TimeLocale -> String -> Maybe TimeZone
getKnownTimeZone TimeLocale
l String
str =TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
JustTimeZone
zone f Char
'Z'String
"UTC"TimeZone
_=TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
JustTimeZone
utc f Char
'Z'[Char
c ]TimeZone
_|JustTimeZone
zone <-Char -> Maybe TimeZone
getMilZone Char
c =TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
JustTimeZone
zone f Char
'Z'String
_TimeZone
_=Maybe TimeZone
forall a. Maybe a
Nothingf Char
_String
_TimeZone
tz =TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
JustTimeZone
tz in(Maybe TimeZone -> (Char, String) -> Maybe TimeZone)
-> Maybe TimeZone -> [(Char, String)] -> Maybe TimeZone
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl(\Maybe TimeZone
mt (Char
c ,String
s )->Maybe TimeZone
mt Maybe TimeZone -> (TimeZone -> Maybe TimeZone) -> Maybe TimeZone
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=Char -> String -> TimeZone -> Maybe TimeZone
f Char
c String
s )(TimeZone -> Maybe TimeZone
forall a. a -> Maybe a
Just(TimeZone -> Maybe TimeZone) -> TimeZone -> Maybe TimeZone
forall a b. (a -> b) -> a -> b
$Int -> TimeZone
minutesToTimeZone Int
0)readTzOffset ::String->MaybeIntreadTzOffset :: String -> Maybe Int
readTzOffset String
str =letgetSign :: Char -> Maybe a
getSign Char
'+'=a -> Maybe a
forall a. a -> Maybe a
Justa
1getSign Char
'-'=a -> Maybe a
forall a. a -> Maybe a
Just(-a
1)getSign Char
_=Maybe a
forall a. Maybe a
Nothingcalc :: Char -> Char -> Char -> Char -> Char -> Maybe b
calc Char
s Char
h1 Char
h2 Char
m1 Char
m2 =dob
sign <-Char -> Maybe b
forall a. Num a => Char -> Maybe a
getSign Char
s b
h <-String -> Maybe b
forall a. Read a => String -> Maybe a
readMaybe[Char
h1 ,Char
h2 ]b
m <-String -> Maybe b
forall a. Read a => String -> Maybe a
readMaybe[Char
m1 ,Char
m2 ]b -> Maybe b
forall (m :: * -> *) a. Monad m => a -> m a
return(b -> Maybe b) -> b -> Maybe b
forall a b. (a -> b) -> a -> b
$b
sign b -> b -> b
forall a. Num a => a -> a -> a
*(b
60b -> b -> b
forall a. Num a => a -> a -> a
*b
h b -> b -> b
forall a. Num a => a -> a -> a
+b
m )incaseString
str of(Char
s :Char
h1 :Char
h2 :Char
':':Char
m1 :Char
m2 :[])->Char -> Char -> Char -> Char -> Char -> Maybe Int
forall b.
(Num b, Read b) =>
Char -> Char -> Char -> Char -> Char -> Maybe b
calc Char
s Char
h1 Char
h2 Char
m1 Char
m2 (Char
s :Char
h1 :Char
h2 :Char
m1 :Char
m2 :[])->Char -> Char -> Char -> Char -> Char -> Maybe Int
forall b.
(Num b, Read b) =>
Char -> Char -> Char -> Char -> Char -> Maybe b
calc Char
s Char
h1 Char
h2 Char
m1 Char
m2 String
_->Maybe Int
forall a. Maybe a
NothinginstanceParseTime ZonedTime wheresubstituteTimeSpecifier :: Proxy ZonedTime -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy ZonedTime
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy ZonedTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy ZonedTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe ZonedTime
buildTime TimeLocale
l [(Char, String)]
xs =letf :: ZonedTime -> (Char, String) -> Maybe ZonedTime
f (ZonedTime (LocalTime Day
_TimeOfDay
tod )TimeZone
z )(Char
's',String
x )=doInteger
a <-String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
x lets :: POSIXTime
s =Integer -> POSIXTime
forall a. Num a => Integer -> a
fromIntegerInteger
a (Integer
_,Pico
ps )=Pico -> (Integer, Pico)
forall a b. (RealFrac a, Integral b) => a -> (b, a)
properFraction(TimeOfDay -> Pico
todSec TimeOfDay
tod )::(Integer,Pico)s' :: POSIXTime
s' =POSIXTime
s POSIXTime -> POSIXTime -> POSIXTime
forall a. Num a => a -> a -> a
+Rational -> POSIXTime
forall a. Fractional a => Rational -> a
fromRational(Pico -> Rational
forall a. Real a => a -> Rational
toRationalPico
ps )ZonedTime -> Maybe ZonedTime
forall (m :: * -> *) a. Monad m => a -> m a
return(ZonedTime -> Maybe ZonedTime) -> ZonedTime -> Maybe ZonedTime
forall a b. (a -> b) -> a -> b
$TimeZone -> UTCTime -> ZonedTime
utcToZonedTime TimeZone
z (POSIXTime -> UTCTime
posixSecondsToUTCTime POSIXTime
s' )f ZonedTime
t (Char, String)
_=ZonedTime -> Maybe ZonedTime
forall a. a -> Maybe a
JustZonedTime
t in(ZonedTime -> (Char, String) -> Maybe ZonedTime)
-> Maybe ZonedTime -> [(Char, String)] -> Maybe ZonedTime
forall (m :: * -> *) a b.
Monad m =>
(a -> b -> m a) -> m a -> [b] -> m a
mfoldl ZonedTime -> (Char, String) -> Maybe ZonedTime
f (LocalTime -> TimeZone -> ZonedTime
ZonedTime (LocalTime -> TimeZone -> ZonedTime)
-> Maybe LocalTime -> Maybe (TimeZone -> ZonedTime)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>(TimeLocale -> [(Char, String)] -> Maybe LocalTime
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs )Maybe (TimeZone -> ZonedTime) -> Maybe TimeZone -> Maybe ZonedTime
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*>(TimeLocale -> [(Char, String)] -> Maybe TimeZone
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs ))[(Char, String)]
xs instanceParseTime UTCTime wheresubstituteTimeSpecifier :: Proxy UTCTime -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy UTCTime
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy UTCTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy UTCTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe UTCTime
buildTime TimeLocale
l [(Char, String)]
xs =ZonedTime -> UTCTime
zonedTimeToUTC (ZonedTime -> UTCTime) -> Maybe ZonedTime -> Maybe UTCTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>TimeLocale -> [(Char, String)] -> Maybe ZonedTime
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs instanceParseTime UniversalTime wheresubstituteTimeSpecifier :: Proxy UniversalTime -> TimeLocale -> Char -> Maybe String
substituteTimeSpecifier Proxy UniversalTime
_=TimeLocale -> Char -> Maybe String
timeSubstituteTimeSpecifier parseTimeSpecifier :: Proxy UniversalTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy UniversalTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
timeParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe UniversalTime
buildTime TimeLocale
l [(Char, String)]
xs =Rational -> LocalTime -> UniversalTime
localTimeToUT1 Rational
0(LocalTime -> UniversalTime)
-> Maybe LocalTime -> Maybe UniversalTime
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$>TimeLocale -> [(Char, String)] -> Maybe LocalTime
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
l [(Char, String)]
xs buildTimeMonths ::[(Char,String)]->MaybeIntegerbuildTimeMonths :: [(Char, String)] -> Maybe Integer
buildTimeMonths [(Char, String)]
xs =do[Integer]
tt <-[(Char, String)]
-> ((Char, String) -> Maybe Integer) -> Maybe [Integer]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
for[(Char, String)]
xs (((Char, String) -> Maybe Integer) -> Maybe [Integer])
-> ((Char, String) -> Maybe Integer) -> Maybe [Integer]
forall a b. (a -> b) -> a -> b
$\(Char
c ,String
s )->caseChar
c ofChar
'y'->(Integer -> Integer) -> Maybe Integer -> Maybe Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
(*)Integer
12)(Maybe Integer -> Maybe Integer) -> Maybe Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
'b'->String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
'B'->String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
_->Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
returnInteger
0Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
return(Integer -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$[Integer] -> Integer
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum[Integer]
tt buildTimeDays ::[(Char,String)]->MaybeIntegerbuildTimeDays :: [(Char, String)] -> Maybe Integer
buildTimeDays [(Char, String)]
xs =do[Integer]
tt <-[(Char, String)]
-> ((Char, String) -> Maybe Integer) -> Maybe [Integer]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
for[(Char, String)]
xs (((Char, String) -> Maybe Integer) -> Maybe [Integer])
-> ((Char, String) -> Maybe Integer) -> Maybe [Integer]
forall a b. (a -> b) -> a -> b
$\(Char
c ,String
s )->caseChar
c ofChar
'w'->(Integer -> Integer) -> Maybe Integer -> Maybe Integer
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap(Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
(*)Integer
7)(Maybe Integer -> Maybe Integer) -> Maybe Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
'd'->String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
'D'->String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Char
_->Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
returnInteger
0Integer -> Maybe Integer
forall (m :: * -> *) a. Monad m => a -> m a
return(Integer -> Maybe Integer) -> Integer -> Maybe Integer
forall a b. (a -> b) -> a -> b
$[Integer] -> Integer
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum[Integer]
tt buildTimeSeconds ::[(Char,String)]->MaybePicobuildTimeSeconds :: [(Char, String)] -> Maybe Pico
buildTimeSeconds [(Char, String)]
xs =do[Pico]
tt <-[(Char, String)] -> ((Char, String) -> Maybe Pico) -> Maybe [Pico]
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
t a -> (a -> f b) -> f (t b)
for[(Char, String)]
xs (((Char, String) -> Maybe Pico) -> Maybe [Pico])
-> ((Char, String) -> Maybe Pico) -> Maybe [Pico]
forall a b. (a -> b) -> a -> b
$\(Char
c ,String
s )->letreadInt ::Integer->MaybePicoreadInt :: Integer -> Maybe Pico
readInt Integer
t =doInteger
i <-String -> Maybe Integer
forall a. Read a => String -> Maybe a
readMaybeString
s Pico -> Maybe Pico
forall (m :: * -> *) a. Monad m => a -> m a
return(Pico -> Maybe Pico) -> Pico -> Maybe Pico
forall a b. (a -> b) -> a -> b
$Integer -> Pico
forall a. Num a => Integer -> a
fromInteger(Integer -> Pico) -> Integer -> Pico
forall a b. (a -> b) -> a -> b
$Integer
i Integer -> Integer -> Integer
forall a. Num a => a -> a -> a
*Integer
t incaseChar
c ofChar
'h'->Integer -> Maybe Pico
readInt Integer
3600Char
'H'->Integer -> Maybe Pico
readInt Integer
3600Char
'm'->Integer -> Maybe Pico
readInt Integer
60Char
'M'->Integer -> Maybe Pico
readInt Integer
60Char
's'->String -> Maybe Pico
forall a. Read a => String -> Maybe a
readMaybeString
s Char
'S'->String -> Maybe Pico
forall a. Read a => String -> Maybe a
readMaybeString
s Char
_->Pico -> Maybe Pico
forall (m :: * -> *) a. Monad m => a -> m a
returnPico
0Pico -> Maybe Pico
forall (m :: * -> *) a. Monad m => a -> m a
return(Pico -> Maybe Pico) -> Pico -> Maybe Pico
forall a b. (a -> b) -> a -> b
$[Pico] -> Pico
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum[Pico]
tt instanceParseTime NominalDiffTime whereparseTimeSpecifier :: Proxy POSIXTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy POSIXTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
durationParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe POSIXTime
buildTime TimeLocale
_[(Char, String)]
xs =doInteger
dd <-[(Char, String)] -> Maybe Integer
buildTimeDays [(Char, String)]
xs Pico
tt <-[(Char, String)] -> Maybe Pico
buildTimeSeconds [(Char, String)]
xs POSIXTime -> Maybe POSIXTime
forall (m :: * -> *) a. Monad m => a -> m a
return(POSIXTime -> Maybe POSIXTime) -> POSIXTime -> Maybe POSIXTime
forall a b. (a -> b) -> a -> b
$(Integer -> POSIXTime
forall a. Num a => Integer -> a
fromIntegerInteger
dd POSIXTime -> POSIXTime -> POSIXTime
forall a. Num a => a -> a -> a
*POSIXTime
86400)POSIXTime -> POSIXTime -> POSIXTime
forall a. Num a => a -> a -> a
+Pico -> POSIXTime
forall a b. (Real a, Fractional b) => a -> b
realToFracPico
tt instanceParseTime DiffTime whereparseTimeSpecifier :: Proxy DiffTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy DiffTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
durationParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe DiffTime
buildTime TimeLocale
_[(Char, String)]
xs =doInteger
dd <-[(Char, String)] -> Maybe Integer
buildTimeDays [(Char, String)]
xs Pico
tt <-[(Char, String)] -> Maybe Pico
buildTimeSeconds [(Char, String)]
xs DiffTime -> Maybe DiffTime
forall (m :: * -> *) a. Monad m => a -> m a
return(DiffTime -> Maybe DiffTime) -> DiffTime -> Maybe DiffTime
forall a b. (a -> b) -> a -> b
$(Integer -> DiffTime
forall a. Num a => Integer -> a
fromIntegerInteger
dd DiffTime -> DiffTime -> DiffTime
forall a. Num a => a -> a -> a
*DiffTime
86400)DiffTime -> DiffTime -> DiffTime
forall a. Num a => a -> a -> a
+Pico -> DiffTime
forall a b. (Real a, Fractional b) => a -> b
realToFracPico
tt instanceParseTime CalendarDiffDays whereparseTimeSpecifier :: Proxy CalendarDiffDays
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy CalendarDiffDays
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
durationParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe CalendarDiffDays
buildTime TimeLocale
_[(Char, String)]
xs =doInteger
mm <-[(Char, String)] -> Maybe Integer
buildTimeMonths [(Char, String)]
xs Integer
dd <-[(Char, String)] -> Maybe Integer
buildTimeDays [(Char, String)]
xs CalendarDiffDays -> Maybe CalendarDiffDays
forall (m :: * -> *) a. Monad m => a -> m a
return(CalendarDiffDays -> Maybe CalendarDiffDays)
-> CalendarDiffDays -> Maybe CalendarDiffDays
forall a b. (a -> b) -> a -> b
$Integer -> Integer -> CalendarDiffDays
CalendarDiffDays Integer
mm Integer
dd instanceParseTime CalendarDiffTime whereparseTimeSpecifier :: Proxy CalendarDiffTime
-> TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
parseTimeSpecifier Proxy CalendarDiffTime
_=TimeLocale -> Maybe ParseNumericPadding -> Char -> ReadP String
durationParseTimeSpecifier buildTime :: TimeLocale -> [(Char, String)] -> Maybe CalendarDiffTime
buildTime TimeLocale
locale [(Char, String)]
xs =doInteger
mm <-[(Char, String)] -> Maybe Integer
buildTimeMonths [(Char, String)]
xs POSIXTime
tt <-TimeLocale -> [(Char, String)] -> Maybe POSIXTime
forall t. ParseTime t => TimeLocale -> [(Char, String)] -> Maybe t
buildTime TimeLocale
locale [(Char, String)]
xs CalendarDiffTime -> Maybe CalendarDiffTime
forall (m :: * -> *) a. Monad m => a -> m a
return(CalendarDiffTime -> Maybe CalendarDiffTime)
-> CalendarDiffTime -> Maybe CalendarDiffTime
forall a b. (a -> b) -> a -> b
$Integer -> POSIXTime -> CalendarDiffTime
CalendarDiffTime Integer
mm POSIXTime
tt 

AltStyle によって変換されたページ (->オリジナル) /