thyme-0.4: src/Data/Thyme/Calendar/MonthDay.hs
{-# LANGUAGE CPP #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE ViewPatterns #-}
#include "thyme.h"
-- | Calendar months and day-of-months.
module Data.Thyme.Calendar.MonthDay
( Month, DayOfMonth
, MonthDay (..), _mdMonth, _mdDay
, monthDay, monthDayValid, monthLength
, module Data.Thyme.Calendar.MonthDay
) where
import Prelude
import Control.Lens
import Data.Thyme.Calendar.Internal
-- * Compatibility
-- | Predicated on whether or not it is a leap year, convert an ordinal
-- 'DayOfYear' to its corresponding 'Month' and 'DayOfMonth'.
--
-- @
-- 'dayOfYearToMonthAndDay' leap ('view' ('monthDay' leap) -> 'MonthDay' m d) = (m, d)
-- @
{-# INLINE dayOfYearToMonthAndDay #-}
dayOfYearToMonthAndDay
:: Bool -- ^ 'isLeapYear'?
-> DayOfYear
-> (Month, DayOfMonth)
dayOfYearToMonthAndDay leap (view (monthDay leap) -> MonthDay m d) = (m, d)
-- | Predicated on whether or not it is a leap year, convert a 'Month' and
-- 'DayOfMonth' to its corresponding ordinal 'DayOfYear'.
-- Does not validate the input.
--
-- @
-- 'monthAndDayToDayOfYear' leap m d = 'monthDay' leap 'Control.Lens.#' 'MonthDay' m d
-- @
{-# INLINE monthAndDayToDayOfYear #-}
monthAndDayToDayOfYear
:: Bool -- ^ 'isLeapYear'?
-> Month
-> DayOfMonth
-> DayOfYear
monthAndDayToDayOfYear leap m d = monthDay leap # MonthDay m d
-- | Predicated on whether or not it is a leap year, convert a 'Month' and
-- 'DayOfMonth' to its corresponding ordinal 'DayOfYear'.
-- Returns 'Nothing' for invalid input.
--
-- @
-- 'monthAndDayToDayOfYearValid' leap m d = 'monthDayValid' leap ('MonthDay' m d)
-- @
{-# INLINE monthAndDayToDayOfYearValid #-}
monthAndDayToDayOfYearValid
:: Bool -- ^ 'isLeapYear'?
-> Month
-> DayOfMonth
-> Maybe DayOfYear
monthAndDayToDayOfYearValid leap m d = monthDayValid leap (MonthDay m d)