{-# LANGUAGE Safe #-}

module Data.Time.Calendar.Types where

-- | Year of Common Era.
type Year = Integer

-- | Month of year, in range 1 (January) to 12 (December).
type MonthOfYear = Int

pattern January :: MonthOfYear
pattern $bJanuary :: MonthOfYear
$mJanuary :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
January = 1

pattern February :: MonthOfYear
pattern $bFebruary :: MonthOfYear
$mFebruary :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
February = 2

pattern March :: MonthOfYear
pattern $bMarch :: MonthOfYear
$mMarch :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
March = 3

pattern April :: MonthOfYear
pattern $bApril :: MonthOfYear
$mApril :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
April = 4

pattern May :: MonthOfYear
pattern $bMay :: MonthOfYear
$mMay :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
May = 5

pattern June :: MonthOfYear
pattern $bJune :: MonthOfYear
$mJune :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
June = 6

pattern July :: MonthOfYear
pattern $bJuly :: MonthOfYear
$mJuly :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
July = 7

pattern August :: MonthOfYear
pattern $bAugust :: MonthOfYear
$mAugust :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
August = 8

pattern September :: MonthOfYear
pattern $bSeptember :: MonthOfYear
$mSeptember :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
September = 9

pattern October :: MonthOfYear
pattern $bOctober :: MonthOfYear
$mOctober :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
October = 10

pattern November :: MonthOfYear
pattern $bNovember :: MonthOfYear
$mNovember :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
November = 11

-- | The twelve 'MonthOfYear' patterns form a @COMPLETE@ set.
pattern December :: MonthOfYear
pattern $bDecember :: MonthOfYear
$mDecember :: forall r. MonthOfYear -> (Void# -> r) -> (Void# -> r) -> r
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 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