{-# OPTIONS_HADDOCK hide #-}
{-# LANGUAGE CPP #-}
module Data.Time.LocalTime.TimeZone.Olson.Types
(
OlsonData(..),
Transition(..),
TransitionType(..),
TtInfo(..),
LeapInfo(..),
SizeLimits(..),
defaultLimits,
limitsNoSolar,
noLimits
)
where
#if MIN_VERSION_base(4,11,0)
import Data.Semigroup (Semigroup(..))
#endif
import Data.Monoid (Monoid(..))
import Control.Monad (mplus)
data OlsonData =
OlsonData {
OlsonData -> [Transition]
olsonTransitions :: [Transition],
OlsonData -> [TtInfo String]
olsonTypes :: [TtInfo String],
OlsonData -> [LeapInfo]
olsonLeaps :: [LeapInfo],
OlsonData -> Maybe String
olsonPosixTZ :: (Maybe String)
}
deriving (OlsonData -> OlsonData -> Bool
(OlsonData -> OlsonData -> Bool)
-> (OlsonData -> OlsonData -> Bool) -> Eq OlsonData
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: OlsonData -> OlsonData -> Bool
$c/= :: OlsonData -> OlsonData -> Bool
== :: OlsonData -> OlsonData -> Bool
$c== :: OlsonData -> OlsonData -> Bool
Eq, Int -> OlsonData -> ShowS
[OlsonData] -> ShowS
OlsonData -> String
(Int -> OlsonData -> ShowS)
-> (OlsonData -> String)
-> ([OlsonData] -> ShowS)
-> Show OlsonData
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [OlsonData] -> ShowS
$cshowList :: [OlsonData] -> ShowS
show :: OlsonData -> String
$cshow :: OlsonData -> String
showsPrec :: Int -> OlsonData -> ShowS
$cshowsPrec :: Int -> OlsonData -> ShowS
Show)
#if MIN_VERSION_base(4,11,0)
instance Semigroup OlsonData where
OlsonData [Transition]
a [TtInfo String]
b [LeapInfo]
c Maybe String
d <> :: OlsonData -> OlsonData -> OlsonData
<> OlsonData [Transition]
a' [TtInfo String]
b' [LeapInfo]
c' Maybe String
d' =
[Transition]
-> [TtInfo String] -> [LeapInfo] -> Maybe String -> OlsonData
OlsonData ([Transition]
a [Transition] -> [Transition] -> [Transition]
forall a. [a] -> [a] -> [a]
++ (Transition -> Transition) -> [Transition] -> [Transition]
forall a b. (a -> b) -> [a] -> [b]
map (Int -> Transition -> Transition
shiftBy (Int -> Transition -> Transition)
-> Int -> Transition -> Transition
forall a b. (a -> b) -> a -> b
$ [TtInfo String] -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length [TtInfo String]
b) [Transition]
a')
([TtInfo String]
b [TtInfo String] -> [TtInfo String] -> [TtInfo String]
forall a. [a] -> [a] -> [a]
++ [TtInfo String]
b') ([LeapInfo]
c [LeapInfo] -> [LeapInfo] -> [LeapInfo]
forall a. [a] -> [a] -> [a]
++ [LeapInfo]
c') (Maybe String
d Maybe String -> Maybe String -> Maybe String
forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` Maybe String
d')
where
shiftBy :: Int -> Transition -> Transition
shiftBy Int
n Transition
trans = Transition
trans {transIndex :: Int
transIndex = Int
n Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Transition -> Int
transIndex Transition
trans}
instance Monoid OlsonData where
mempty :: OlsonData
mempty = [Transition]
-> [TtInfo String] -> [LeapInfo] -> Maybe String -> OlsonData
OlsonData [] [] [] Maybe String
forall a. Maybe a
Nothing
#else
instance Monoid OlsonData where
mempty = OlsonData [] [] [] Nothing
mappend (OlsonData a b c d ) (OlsonData a' b' c' d') =
OlsonData (a ++ map (shiftBy $ length b) a')
(b ++ b') (c ++ c') (d `mplus` d')
where
shiftBy n trans = trans {transIndex = n + transIndex trans}
#endif
data Transition =
Transition
{Transition -> Integer
transTime :: Integer,
Transition -> Int
transIndex :: Int
}
deriving (Transition -> Transition -> Bool
(Transition -> Transition -> Bool)
-> (Transition -> Transition -> Bool) -> Eq Transition
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Transition -> Transition -> Bool
$c/= :: Transition -> Transition -> Bool
== :: Transition -> Transition -> Bool
$c== :: Transition -> Transition -> Bool
Eq, Int -> Transition -> ShowS
[Transition] -> ShowS
Transition -> String
(Int -> Transition -> ShowS)
-> (Transition -> String)
-> ([Transition] -> ShowS)
-> Show Transition
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Transition] -> ShowS
$cshowList :: [Transition] -> ShowS
show :: Transition -> String
$cshow :: Transition -> String
showsPrec :: Int -> Transition -> ShowS
$cshowsPrec :: Int -> Transition -> ShowS
Show)
data TransitionType = Std | Wall | UTC
deriving (TransitionType -> TransitionType -> Bool
(TransitionType -> TransitionType -> Bool)
-> (TransitionType -> TransitionType -> Bool) -> Eq TransitionType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransitionType -> TransitionType -> Bool
$c/= :: TransitionType -> TransitionType -> Bool
== :: TransitionType -> TransitionType -> Bool
$c== :: TransitionType -> TransitionType -> Bool
Eq, Eq TransitionType
Eq TransitionType
-> (TransitionType -> TransitionType -> Ordering)
-> (TransitionType -> TransitionType -> Bool)
-> (TransitionType -> TransitionType -> Bool)
-> (TransitionType -> TransitionType -> Bool)
-> (TransitionType -> TransitionType -> Bool)
-> (TransitionType -> TransitionType -> TransitionType)
-> (TransitionType -> TransitionType -> TransitionType)
-> Ord TransitionType
TransitionType -> TransitionType -> Bool
TransitionType -> TransitionType -> Ordering
TransitionType -> TransitionType -> TransitionType
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TransitionType -> TransitionType -> TransitionType
$cmin :: TransitionType -> TransitionType -> TransitionType
max :: TransitionType -> TransitionType -> TransitionType
$cmax :: TransitionType -> TransitionType -> TransitionType
>= :: TransitionType -> TransitionType -> Bool
$c>= :: TransitionType -> TransitionType -> Bool
> :: TransitionType -> TransitionType -> Bool
$c> :: TransitionType -> TransitionType -> Bool
<= :: TransitionType -> TransitionType -> Bool
$c<= :: TransitionType -> TransitionType -> Bool
< :: TransitionType -> TransitionType -> Bool
$c< :: TransitionType -> TransitionType -> Bool
compare :: TransitionType -> TransitionType -> Ordering
$ccompare :: TransitionType -> TransitionType -> Ordering
$cp1Ord :: Eq TransitionType
Ord, Int -> TransitionType -> ShowS
[TransitionType] -> ShowS
TransitionType -> String
(Int -> TransitionType -> ShowS)
-> (TransitionType -> String)
-> ([TransitionType] -> ShowS)
-> Show TransitionType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransitionType] -> ShowS
$cshowList :: [TransitionType] -> ShowS
show :: TransitionType -> String
$cshow :: TransitionType -> String
showsPrec :: Int -> TransitionType -> ShowS
$cshowsPrec :: Int -> TransitionType -> ShowS
Show)
data TtInfo abbr =
TtInfo
{TtInfo abbr -> Int
tt_utoff :: Int,
TtInfo abbr -> Bool
tt_isdst :: Bool,
TtInfo abbr -> TransitionType
tt_ttype :: TransitionType,
TtInfo abbr -> abbr
tt_abbr :: abbr
}
deriving (TtInfo abbr -> TtInfo abbr -> Bool
(TtInfo abbr -> TtInfo abbr -> Bool)
-> (TtInfo abbr -> TtInfo abbr -> Bool) -> Eq (TtInfo abbr)
forall abbr. Eq abbr => TtInfo abbr -> TtInfo abbr -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TtInfo abbr -> TtInfo abbr -> Bool
$c/= :: forall abbr. Eq abbr => TtInfo abbr -> TtInfo abbr -> Bool
== :: TtInfo abbr -> TtInfo abbr -> Bool
$c== :: forall abbr. Eq abbr => TtInfo abbr -> TtInfo abbr -> Bool
Eq, Eq (TtInfo abbr)
Eq (TtInfo abbr)
-> (TtInfo abbr -> TtInfo abbr -> Ordering)
-> (TtInfo abbr -> TtInfo abbr -> Bool)
-> (TtInfo abbr -> TtInfo abbr -> Bool)
-> (TtInfo abbr -> TtInfo abbr -> Bool)
-> (TtInfo abbr -> TtInfo abbr -> Bool)
-> (TtInfo abbr -> TtInfo abbr -> TtInfo abbr)
-> (TtInfo abbr -> TtInfo abbr -> TtInfo abbr)
-> Ord (TtInfo abbr)
TtInfo abbr -> TtInfo abbr -> Bool
TtInfo abbr -> TtInfo abbr -> Ordering
TtInfo abbr -> TtInfo abbr -> TtInfo abbr
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall abbr. Ord abbr => Eq (TtInfo abbr)
forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Bool
forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Ordering
forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> TtInfo abbr
min :: TtInfo abbr -> TtInfo abbr -> TtInfo abbr
$cmin :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> TtInfo abbr
max :: TtInfo abbr -> TtInfo abbr -> TtInfo abbr
$cmax :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> TtInfo abbr
>= :: TtInfo abbr -> TtInfo abbr -> Bool
$c>= :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Bool
> :: TtInfo abbr -> TtInfo abbr -> Bool
$c> :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Bool
<= :: TtInfo abbr -> TtInfo abbr -> Bool
$c<= :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Bool
< :: TtInfo abbr -> TtInfo abbr -> Bool
$c< :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Bool
compare :: TtInfo abbr -> TtInfo abbr -> Ordering
$ccompare :: forall abbr. Ord abbr => TtInfo abbr -> TtInfo abbr -> Ordering
$cp1Ord :: forall abbr. Ord abbr => Eq (TtInfo abbr)
Ord, Int -> TtInfo abbr -> ShowS
[TtInfo abbr] -> ShowS
TtInfo abbr -> String
(Int -> TtInfo abbr -> ShowS)
-> (TtInfo abbr -> String)
-> ([TtInfo abbr] -> ShowS)
-> Show (TtInfo abbr)
forall abbr. Show abbr => Int -> TtInfo abbr -> ShowS
forall abbr. Show abbr => [TtInfo abbr] -> ShowS
forall abbr. Show abbr => TtInfo abbr -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TtInfo abbr] -> ShowS
$cshowList :: forall abbr. Show abbr => [TtInfo abbr] -> ShowS
show :: TtInfo abbr -> String
$cshow :: forall abbr. Show abbr => TtInfo abbr -> String
showsPrec :: Int -> TtInfo abbr -> ShowS
$cshowsPrec :: forall abbr. Show abbr => Int -> TtInfo abbr -> ShowS
Show)
data LeapInfo =
LeapInfo
{LeapInfo -> Integer
leapTime :: Integer,
LeapInfo -> Int
leapOffset :: Int
}
deriving (LeapInfo -> LeapInfo -> Bool
(LeapInfo -> LeapInfo -> Bool)
-> (LeapInfo -> LeapInfo -> Bool) -> Eq LeapInfo
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: LeapInfo -> LeapInfo -> Bool
$c/= :: LeapInfo -> LeapInfo -> Bool
== :: LeapInfo -> LeapInfo -> Bool
$c== :: LeapInfo -> LeapInfo -> Bool
Eq, Int -> LeapInfo -> ShowS
[LeapInfo] -> ShowS
LeapInfo -> String
(Int -> LeapInfo -> ShowS)
-> (LeapInfo -> String) -> ([LeapInfo] -> ShowS) -> Show LeapInfo
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [LeapInfo] -> ShowS
$cshowList :: [LeapInfo] -> ShowS
show :: LeapInfo -> String
$cshow :: LeapInfo -> String
showsPrec :: Int -> LeapInfo -> ShowS
$cshowsPrec :: Int -> LeapInfo -> ShowS
Show)
data SizeLimits = SizeLimits
{SizeLimits -> Maybe Int
maxTimes :: Maybe Int,
SizeLimits -> Maybe Int
maxTypes :: Maybe Int,
SizeLimits -> Maybe Int
maxAbbrChars :: Maybe Int,
SizeLimits -> Maybe Int
maxLeaps :: Maybe Int
}
defaultLimits :: SizeLimits
defaultLimits :: SizeLimits
defaultLimits = SizeLimits :: Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> SizeLimits
SizeLimits { maxTimes :: Maybe Int
maxTimes = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
1200, maxTypes :: Maybe Int
maxTypes = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
256,
maxAbbrChars :: Maybe Int
maxAbbrChars = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
50, maxLeaps :: Maybe Int
maxLeaps = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
50 }
limitsNoSolar :: SizeLimits
limitsNoSolar :: SizeLimits
limitsNoSolar = SizeLimits
defaultLimits { maxTypes :: Maybe Int
maxTypes = Int -> Maybe Int
forall a. a -> Maybe a
Just Int
20 }
noLimits :: SizeLimits
noLimits :: SizeLimits
noLimits = Maybe Int -> Maybe Int -> Maybe Int -> Maybe Int -> SizeLimits
SizeLimits Maybe Int
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing Maybe Int
forall a. Maybe a
Nothing