-- references:
-- https://en.wikipedia.org/wiki/Federal_holidays_in_the_United_States
{-# LANGUAGE OverloadedStrings #-}

module Holidays.UnitedStates (
  holidays,
) where

import Data.Time

import Holidays.Base
import Holidays.DateFinder
import Holidays.DateTransform

holidays :: ([Year -> Holiday], [DateTransform])
holidays :: ([Year -> Holiday], [DateTransform])
holidays =
  ( [ Text -> Day -> Holiday
hday Text
"new_years_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
newYearsDay,
      Text -> Day -> Holiday
hday Text
"martin_luther_kings_birthday" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
3 `mon`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
after (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
jan DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"george_washingtons_birthday" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
3 `mon`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
after (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
feb DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"memorial_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
1 `mon`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
before (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
jun DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"juneteenth_independence_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
jun DayOfMonth
19,
      Text -> Day -> Holiday
hday Text
"independence_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
jul DayOfMonth
4,
      Text -> Day -> Holiday
hday Text
"labor_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
1 `mon`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
after (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
sep DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"columbus_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
2 `mon`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
after (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
oct DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"veterans_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
nov DayOfMonth
11,
      Text -> Day -> Holiday
hday Text
"thanksgiving_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Year
4 `thurs`) ((Year -> Maybe DayOfWeek -> Day) -> Day)
-> (Year -> Year -> Maybe DayOfWeek -> Day) -> Year -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Day -> Year -> Maybe DayOfWeek -> Day
after (Day -> Year -> Maybe DayOfWeek -> Day)
-> (Year -> Day) -> Year -> Year -> Maybe DayOfWeek -> Day
forall b c a. (b -> c) -> (a -> b) -> a -> c
. DayOfMonth -> Year -> Day
nov DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"christmas_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
christmasDay
    ],
    []
  )