time-1.12.1: lib/Data/Time/Calendar/Types.hs
{-# LANGUAGE Safe #-}
module Data.Time.Calendar.Types where
-- | Year of Common Era (when positive).
type Year = Integer
-- | Also known as Anno Domini.
pattern CommonEra :: Integer -> Year
pattern CommonEra n <-
((\y -> if y > 0 then Just y else Nothing) -> Just n)
where
CommonEra n = n
-- | Also known as Before Christ.
-- Note that Year 1 = 1 CE, and the previous Year 0 = 1 BCE.
-- 'CommonEra' and 'BeforeCommonEra' form a @COMPLETE@ set.
pattern BeforeCommonEra :: Integer -> Year
pattern BeforeCommonEra n <-
((\y -> if y <= 0 then Just (1 - y) else Nothing) -> Just n)
where
BeforeCommonEra n = 1 - n
{-# COMPLETE CommonEra, BeforeCommonEra #-}
-- | Month of year, in range 1 (January) to 12 (December).
type MonthOfYear = Int
pattern January :: MonthOfYear
pattern January = 1
pattern February :: MonthOfYear
pattern February = 2
pattern March :: MonthOfYear
pattern March = 3
pattern April :: MonthOfYear
pattern April = 4
pattern May :: MonthOfYear
pattern May = 5
pattern June :: MonthOfYear
pattern June = 6
pattern July :: MonthOfYear
pattern July = 7
pattern August :: MonthOfYear
pattern August = 8
pattern September :: MonthOfYear
pattern September = 9
pattern October :: MonthOfYear
pattern October = 10
pattern November :: MonthOfYear
pattern November = 11
-- | The twelve 'MonthOfYear' patterns form a @COMPLETE@ set.
pattern December :: MonthOfYear
pattern December = 12
{-# COMPLETE January, February, March, April, May, June, July, August, September, October, November, December #-}
-- | Day of month, in range 1 to 31.
type DayOfMonth = Int
-- | Day of quarter, in range 1 to 92.
type DayOfQuarter = Int
-- | Day of year, in range 1 (January 1st) to 366.
-- December 31st is 365 in a common year, 366 in a leap year.
type DayOfYear = Int
-- | Week of year, by various reckonings, generally in range 0-53 depending on reckoning.
type WeekOfYear = Int