lib: type signatures

This commit is contained in:
Simon Michael 2018-07-24 14:24:45 +01:00
parent 39aed387e9
commit da8047d286

View File

@ -545,6 +545,7 @@ startofyear day = fromGregorian y 1 1 where (y,_,_) = toGregorian day
-- 2016-12-31 -- 2016-12-31
-- >>> nthdayofyearcontaining 1 1 wed22nd -- >>> nthdayofyearcontaining 1 1 wed22nd
-- 2017-01-01 -- 2017-01-01
nthdayofyearcontaining :: Month -> MonthDay -> Day -> Day
nthdayofyearcontaining m n d | mmddOfSameYear <= d = mmddOfSameYear nthdayofyearcontaining m n d | mmddOfSameYear <= d = mmddOfSameYear
| otherwise = mmddOfPrevYear | otherwise = mmddOfPrevYear
where mmddOfSameYear = addDays (fromIntegral n-1) $ applyN (m-1) nextmonth s where mmddOfSameYear = addDays (fromIntegral n-1) $ applyN (m-1) nextmonth s
@ -568,6 +569,7 @@ nthdayofyearcontaining m n d | mmddOfSameYear <= d = mmddOfSameYear
-- 2017-10-23 -- 2017-10-23
-- >>> nthdayofmonthcontaining 30 wed22nd -- >>> nthdayofmonthcontaining 30 wed22nd
-- 2017-10-30 -- 2017-10-30
nthdayofmonthcontaining :: MonthDay -> Day -> Day
nthdayofmonthcontaining n d | nthOfSameMonth <= d = nthOfSameMonth nthdayofmonthcontaining n d | nthOfSameMonth <= d = nthOfSameMonth
| otherwise = nthOfPrevMonth | otherwise = nthOfPrevMonth
where nthOfSameMonth = nthdayofmonth n s where nthOfSameMonth = nthdayofmonth n s
@ -591,6 +593,7 @@ nthdayofmonthcontaining n d | nthOfSameMonth <= d = nthOfSameMonth
-- 2017-11-16 -- 2017-11-16
-- >>> nthdayofweekcontaining 5 wed22nd -- >>> nthdayofweekcontaining 5 wed22nd
-- 2017-11-17 -- 2017-11-17
nthdayofweekcontaining :: WeekDay -> Day -> Day
nthdayofweekcontaining n d | nthOfSameWeek <= d = nthOfSameWeek nthdayofweekcontaining n d | nthOfSameWeek <= d = nthOfSameWeek
| otherwise = nthOfPrevWeek | otherwise = nthOfPrevWeek
where nthOfSameWeek = addDays (fromIntegral n-1) s where nthOfSameWeek = addDays (fromIntegral n-1) s
@ -614,12 +617,14 @@ nthdayofweekcontaining n d | nthOfSameWeek <= d = nthOfSameWeek
-- 2017-10-26 -- 2017-10-26
-- >>> nthweekdayofmonthcontaining 4 5 wed22nd -- >>> nthweekdayofmonthcontaining 4 5 wed22nd
-- 2017-10-27 -- 2017-10-27
nthweekdayofmonthcontaining :: Int -> WeekDay -> Day -> Day
nthweekdayofmonthcontaining n wd d | nthWeekdaySameMonth <= d = nthWeekdaySameMonth nthweekdayofmonthcontaining n wd d | nthWeekdaySameMonth <= d = nthWeekdaySameMonth
| otherwise = nthWeekdayPrevMonth | otherwise = nthWeekdayPrevMonth
where nthWeekdaySameMonth = advancetonthweekday n wd $ startofmonth d where nthWeekdaySameMonth = advancetonthweekday n wd $ startofmonth d
nthWeekdayPrevMonth = advancetonthweekday n wd $ prevmonth d nthWeekdayPrevMonth = advancetonthweekday n wd $ prevmonth d
-- | Advance to nth weekday wd after given start day s -- | Advance to nth weekday wd after given start day s
advancetonthweekday :: Int -> WeekDay -> Day -> Day
advancetonthweekday n wd s = addWeeks (n-1) . firstMatch (>=s) . iterate (addWeeks 1) $ firstweekday s advancetonthweekday n wd s = addWeeks (n-1) . firstMatch (>=s) . iterate (addWeeks 1) $ firstweekday s
where where
addWeeks k = addDays (7 * fromIntegral k) addWeeks k = addDays (7 * fromIntegral k)