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

module Holidays.UnitedKingdom (
  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
"good_friday" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
goodFriday,
      Text -> Day -> Holiday
hday Text
"easter_sunday" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
easterSunday,
      Text -> Day -> Holiday
hday Text
"early_may_bank_holiday" (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
may DayOfMonth
1,
      Text -> Day -> Holiday
hday Text
"spring_bank_holiday" (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
"summer_bank_holiday" (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
sep 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,
      Text -> Day -> Holiday
hday Text
"boxing_day" (Day -> Holiday) -> (Year -> Day) -> Year -> Holiday
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Year -> Day
boxingDay
    ],
    [DateTransform
substituteRule]
  )