1{-# LANGUAGE CPP #-} 2{-# LANGUAGE BangPatterns #-} 3{-# LANGUAGE StandaloneDeriving #-} 4{-# LANGUAGE DeriveDataTypeable #-} 5module Data.Time.Orphans () where 6 7import Data.Orphans () 8 9import Control.DeepSeq (NFData (..)) 10import Data.Typeable (Typeable) 11import Data.Data (Data) 12import Data.Time 13import Data.Time.Clock 14import Data.Time.Clock.TAI 15import Data.Time.Format 16 17#if MIN_VERSION_time(1,8,0) 18import Data.Time.Clock.System 19#endif 20 21#if !MIN_VERSION_time(1,11,0) 22import Data.Fixed (Pico) 23import Text.Read (Read (..)) 24import Text.ParserCombinators.ReadP 25import Text.ParserCombinators.ReadPrec 26#endif 27 28#if MIN_VERSION_time(1,11,0) 29import Data.Ix (Ix (..)) 30import Data.Time.Calendar.Month 31import Data.Time.Calendar.Quarter 32#endif 33 34#if !MIN_VERSION_time(1,4,0) 35instance NFData Day where 36 rnf (ModifiedJulianDay d) = rnf d 37 38instance NFData UniversalTime where 39 rnf (ModJulianDate d) = rnf d 40 41instance NFData DiffTime where 42 rnf d = d `seq` () 43 44instance NFData AbsoluteTime where 45 rnf d = d `seq` () 46 47instance NFData UTCTime where 48 rnf (UTCTime d t) = rnf d `seq` rnf t 49 50instance NFData NominalDiffTime where 51 rnf d = d `seq` () 52 53instance NFData LocalTime where 54 rnf (LocalTime d tod) = rnf d `seq` rnf tod 55 56instance NFData ZonedTime where 57 rnf (ZonedTime lt tz) = rnf lt `seq` rnf tz 58 59instance NFData TimeOfDay where 60 rnf (TimeOfDay h m s) = rnf h `seq` rnf m `seq` rnf s 61 62instance NFData TimeZone where 63 rnf (TimeZone a b c) = rnf a `seq` rnf b `seq` rnf c 64#endif 65 66#if !MIN_VERSION_time(1,6,0) 67instance ParseTime UniversalTime where 68 -- substituteTimeSpecifier _ = timeSubstituteTimeSpecifier 69 -- parseTimeSpecifier _ = timeParseTimeSpecifier 70 buildTime l xs = localTimeToUT1 0 (buildTime l xs) 71 72instance FormatTime UniversalTime where 73 formatCharacter c = fmap (\f tl fo t -> f tl fo (ut1ToLocalTime 0 t)) (formatCharacter c) 74 75instance Show UniversalTime where 76 show t = show (ut1ToLocalTime 0 t) 77 78instance Read UniversalTime where 79 readsPrec n s = [ (localTimeToUT1 0 t, r) | (t,r) <- readsPrec n s ] 80#endif 81 82 83#if MIN_VERSION_time(1,9,0) && !MIN_VERSION_time(1,11,0) 84deriving instance Ord DayOfWeek 85#endif 86 87#if MIN_VERSION_time(1,9,0) && !MIN_VERSION_time(1,10,0) 88#if __GLASGOW_HASKELL__ <710 89deriving instance Typeable DayOfWeek 90#endif 91deriving instance Data DayOfWeek 92#endif 93 94#if MIN_VERSION_time(1,8,0) && !MIN_VERSION_time(1,10,0) 95#if __GLASGOW_HASKELL__ <710 96deriving instance Typeable SystemTime 97#endif 98 99deriving instance Data SystemTime 100#endif 101 102#if MIN_VERSION_time(1,9,0) && !MIN_VERSION_time(1,11,1) 103instance NFData DayOfWeek where 104 rnf !_ = () 105 106instance NFData CalendarDiffTime where 107 rnf (CalendarDiffTime x y) = rnf x `seq` rnf y 108 109instance NFData CalendarDiffDays where 110 rnf (CalendarDiffDays x y) = rnf x `seq` rnf y 111#endif 112 113#if !MIN_VERSION_time(1,11,0) 114 115instance Read DiffTime where 116 readPrec = do 117 t <- readPrec :: ReadPrec Pico 118 _ <- lift $ char 's' 119 return $ realToFrac t 120 121instance Read NominalDiffTime where 122 readPrec = do 123 t <- readPrec :: ReadPrec Pico 124 _ <- lift $ char 's' 125 return $ realToFrac t 126 127#endif 128 129#if MIN_VERSION_time(1,11,0) && !MIN_VERSION_time(1,11,1) 130instance NFData Month where 131 rnf (MkMonth m) = rnf m 132 133instance Enum Month where 134 succ (MkMonth a) = MkMonth (succ a) 135 pred (MkMonth a) = MkMonth (pred a) 136 toEnum = MkMonth . toEnum 137 fromEnum (MkMonth a) = fromEnum a 138 enumFrom (MkMonth a) = fmap MkMonth (enumFrom a) 139 enumFromThen (MkMonth a) (MkMonth b) = fmap MkMonth (enumFromThen a b) 140 enumFromTo (MkMonth a) (MkMonth b) = fmap MkMonth (enumFromTo a b) 141 enumFromThenTo (MkMonth a) (MkMonth b) (MkMonth c) = 142 fmap MkMonth (enumFromThenTo a b c) 143 144instance Ix Month where 145 range (MkMonth a, MkMonth b) = fmap MkMonth (range (a, b)) 146 index (MkMonth a, MkMonth b) (MkMonth c) = index (a, b) c 147 inRange (MkMonth a, MkMonth b) (MkMonth c) = inRange (a, b) c 148 rangeSize (MkMonth a, MkMonth b) = rangeSize (a, b) 149 150instance NFData QuarterOfYear where 151 rnf Q1 = () 152 rnf Q2 = () 153 rnf Q3 = () 154 rnf Q4 = () 155 156instance NFData Quarter where 157 rnf (MkQuarter m) = rnf m 158 159instance Enum Quarter where 160 succ (MkQuarter a) = MkQuarter (succ a) 161 pred (MkQuarter a) = MkQuarter (pred a) 162 toEnum = MkQuarter . toEnum 163 fromEnum (MkQuarter a) = fromEnum a 164 enumFrom (MkQuarter a) = fmap MkQuarter (enumFrom a) 165 enumFromThen (MkQuarter a) (MkQuarter b) = fmap MkQuarter (enumFromThen a b) 166 enumFromTo (MkQuarter a) (MkQuarter b) = fmap MkQuarter (enumFromTo a b) 167 enumFromThenTo (MkQuarter a) (MkQuarter b) (MkQuarter c) = 168 fmap MkQuarter (enumFromThenTo a b c) 169 170instance Ix Quarter where 171 range (MkQuarter a, MkQuarter b) = fmap MkQuarter (range (a, b)) 172 index (MkQuarter a, MkQuarter b) (MkQuarter c) = index (a, b) c 173 inRange (MkQuarter a, MkQuarter b) (MkQuarter c) = inRange (a, b) c 174 rangeSize (MkQuarter a, MkQuarter b) = rangeSize (a, b) 175#endif 176