@@ -1,3 +1,4 @@
1+{-# LANGUAGE CPP, DerivingStrategies, DeriveAnyClass #-}
1module Data.Time.LocalTime.Short
2module Data.Time.LocalTime.Short
2 ( ShortZonedTime
3 ( ShortZonedTime
3 , shortZonedTime
4 , shortZonedTime
@@ -17,28 +18,33 @@ module Data.Time.LocalTime.Short
18import Control.DeepSeq (NFData)
19import Control.DeepSeq (NFData)
19import Control.Lens
20import Control.Lens
20−import Control.Lens.Missing
21import Control.Monad.State
21import Control.Monad.State
22import Data.Aeson
22import Data.Aeson
23import Data.Binary (Binary)
23import Data.Binary (Binary)
24+import Data.Binary.Instances.Time ()
24import Data.Coerce
25import Data.Coerce
25import Data.Ord (comparing)
26import Data.Ord (comparing)
26−import qualified Data.Time as T
27+import Data.Time as T
27import Data.Time.Fmt
28import Data.Time.Fmt
28−import Data.Time.Format
29+import Data.Time.Utils
29−import Data.Time.LocalTime.Instances ()
30import GHC.Generics (Generic)
30import GHC.Generics (Generic)
31import Test.QuickCheck (Arbitrary)
31import Test.QuickCheck (Arbitrary)
32import qualified Test.QuickCheck as QC
32import qualified Test.QuickCheck as QC
33import Test.QuickCheck.Instances ()
33import Test.QuickCheck.Instances ()
35+#if MIN_VERSION_time(1,9,0)
37+import Data.Time.Format.Internal
36-- | @ZonedTime@ where seconds = 0.
41-- | @ZonedTime@ where seconds = 0.
37-- The constructor is not exported to maintain the invariant.
42-- The constructor is not exported to maintain the invariant.
38newtype ShortZonedTime
43newtype ShortZonedTime
39 = ShortZonedTime
44 = ShortZonedTime
40 { unShortZonedTime :: T.ZonedTime
45 { unShortZonedTime :: T.ZonedTime
46+ } deriving stock (Generic)
41− } deriving (FormatTime, NFData, Generic, FromJSON, ToJSON)
47+ deriving newtype (FormatTime, NFData, FromJSON, ToJSON)
43shortZonedLocalDay :: ShortZonedTime -> T.Day
49shortZonedLocalDay :: ShortZonedTime -> T.Day
44shortZonedLocalDay = T.localDay . T.zonedTimeToLocalTime . unShortZonedTime
50shortZonedLocalDay = T.localDay . T.zonedTimeToLocalTime . unShortZonedTime
@@ -63,6 +69,10 @@ shortZonedTime = coerce . clipZonedTime
64instance ParseTime ShortZonedTime where
70instance ParseTime ShortZonedTime where
65 buildTime tl ps = shortZonedTime <$> buildTime tl ps
71 buildTime tl ps = shortZonedTime <$> buildTime tl ps
72+#if MIN_VERSION_time(1,9,0)
73+ substituteTimeSpecifier _ = substituteTimeSpecifier (Proxy @T.ZonedTime)
74+ parseTimeSpecifier _ = parseTimeSpecifier (Proxy @T.ZonedTime)
67instance Show ShortZonedTime where
77instance Show ShortZonedTime where
68 -- Display as a string.
78 -- Display as a string.
@@ -86,7 +96,9 @@ instance Ord ShortZonedTime where
86newtype ShortLocalTime
96newtype ShortLocalTime
87 = ShortLocalTime
97 = ShortLocalTime
88 { unShortLocalTime :: T.LocalTime
98 { unShortLocalTime :: T.LocalTime
89− } deriving (Eq, Ord, FormatTime, NFData, Generic)
99+ } deriving stock (Eq, Ord, Generic)
100+ deriving newtype (FormatTime)
101+ deriving newtype (NFData)
91instance Binary ShortLocalTime
103instance Binary ShortLocalTime
@@ -100,6 +112,11 @@ shortLocalTime = coerce . clipLocalTime
101instance ParseTime ShortLocalTime where
113instance ParseTime ShortLocalTime where
102 buildTime tl ps = shortLocalTime <$> buildTime tl ps
114 buildTime tl ps = shortLocalTime <$> buildTime tl ps
115+#if MIN_VERSION_time(1,9,0)
116+ substituteTimeSpecifier _ = substituteTimeSpecifier (Proxy @T.ZonedTime)
117+ parseTimeSpecifier _ = parseTimeSpecifier (Proxy @T.LocalTime)
104type FmtShortZonedTime fmt = FmtTime fmt ShortZonedTime
121type FmtShortZonedTime fmt = FmtTime fmt ShortZonedTime