Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Calendar months and day-of-months.
Synopsis
- type Month = Int
- type DayOfMonth = Int
- data MonthDay = MonthDay {
- mdMonth :: !Month
- mdDay :: !DayOfMonth
- _mdMonth :: Lens' MonthDay Month
- _mdDay :: Lens' MonthDay DayOfMonth
- monthDay :: Bool -> Iso' DayOfYear MonthDay
- monthDayValid :: Bool -> MonthDay -> Maybe DayOfYear
- monthLength :: Bool -> Month -> Days
- dayOfYearToMonthAndDay :: Bool -> DayOfYear -> (Month, DayOfMonth)
- monthAndDayToDayOfYear :: Bool -> Month -> DayOfMonth -> DayOfYear
- monthAndDayToDayOfYearValid :: Bool -> Month -> DayOfMonth -> Maybe DayOfYear
Documentation
type DayOfMonth = Int Source #
Calendar day-of-month, starting from 1.
A strict pair of a Month
and a DayOfMonth
.
MonthDay | |
|
Instances
_mdDay :: Lens' MonthDay DayOfMonth Source #
Predicated on whether or not it's a leap year, convert between an
ordinal DayOfYear
and the corresponding Month
and DayOfMonth
.
> 60^.
monthDay
(isLeapYear
2015)MonthDay
{mdMonth
= 3,mdDay
= 1}
> 60^.
monthDay
(isLeapYear
2016)MonthDay
{mdMonth
= 2,mdDay
= 29}
>monthDay
(isLeapYear
2016)#
MonthDay
2 29 60
>monthDay
(isLeapYear
2015)#
MonthDay
2 28 59
Note that monthDay
is an improper Iso
, as the following example
shows. To handle this case correctly, use monthDayValid
.
>monthDay
(isLeapYear
2015)#
MonthDay
2 29 59
Predicated on whether or not it's a leap year, convert a MonthDay
to
an ordinal DayOfYear
.
>monthDayValid
(isLeapYear
2016) (MonthDay
2 29)Just
60
>monthDayValid
(isLeapYear
2015) (MonthDay
2 29)Nothing
Predicated on whether or not the year is a leap year, return the number
of Days
in the given Month
.
> monthLength (isLeapYear
2015) 2
28
> monthLength (isLeapYear
2016) 2
29
dayOfYearToMonthAndDay Source #
:: Bool | |
-> DayOfYear | |
-> (Month, DayOfMonth) |
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)
monthAndDayToDayOfYear Source #
:: Bool | |
-> Month | |
-> DayOfMonth | |
-> DayOfYear |
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#
MonthDay
m d
monthAndDayToDayOfYearValid Source #
:: Bool | |
-> Month | |
-> DayOfMonth | |
-> Maybe DayOfYear |
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)