{-# 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