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