Stability | experimental |
---|---|
Maintainer | j.mueller.11@ucl.ac.uk |
Safe Haskell | None |
Patterns for re-occurring events. Use the DatePattern
type to build up
a pattern, and the functions elementOf
, instancesFrom
and
intervalsFrom
to evaluate it.
Simple example:
import Control.Lens import Data.Thyme.Calendar import Data.Time.Patterns import qualified Prelude as P Module Main where main = do -- get the 6th of April for the next ten years let april6 = (take 1 $ skip 5 day) `inEach` april let today = (YearMonthDay 2013 12 01)^.from gregorian print $ P.take 10 $ instancesFrom today april6
- day :: DatePattern
- mondayWeek :: DatePattern
- sundayWeek :: DatePattern
- month :: DatePattern
- year :: DatePattern
- january :: DatePattern
- february :: DatePattern
- march :: DatePattern
- april :: DatePattern
- may :: DatePattern
- june :: DatePattern
- july :: DatePattern
- august :: DatePattern
- september :: DatePattern
- october :: DatePattern
- november :: DatePattern
- december :: DatePattern
- monday :: DatePattern
- tuesday :: DatePattern
- wednesday :: DatePattern
- thursday :: DatePattern
- friday :: DatePattern
- saturday :: DatePattern
- sunday :: DatePattern
- never :: DatePattern
- every :: Int -> DatePattern -> DatePattern
- shiftBy :: Days -> DatePattern -> DatePattern
- inEach :: DatePattern -> DatePattern -> DatePattern
- take :: Int -> DatePattern -> DatePattern
- skip :: Int -> DatePattern -> DatePattern
- except :: Day -> DatePattern -> DatePattern
- intersect :: DatePattern -> DatePattern -> DatePattern
- union :: DatePattern -> DatePattern -> DatePattern
- elementOf :: Day -> DatePattern -> Bool
- instancesFrom :: Day -> DatePattern -> [Day]
- intervalsFrom :: Day -> DatePattern -> [Interval Day]
Date Patterns
mondayWeek :: DatePatternSource
Weeks, starting on Monday
sundayWeek :: DatePatternSource
Weeks, starting on Sunday.
Months
Days
Operations on date patterns
inEach :: DatePattern -> DatePattern -> DatePatternSource
The first pattern repeated for each interval of the second pattern. E.g.:
(take 3 $ every 4 monday) `inEach` year
will give the fourth, eighth and twelveth Monday in each year
except :: Day -> DatePattern -> DatePatternSource
Skip over all occurrences of a day. If the pattern describes a period longer than a day, the entire period will be skipped.
intersect :: DatePattern -> DatePattern -> DatePatternSource
Return only occurrences that are present in both patterns
let myBirthday = (take 1 day) `inEach` august let s = intersect myBirthday sunday
Will return August 1 in years when it falls on a Sunday
union :: DatePattern -> DatePattern -> DatePatternSource
Occurrences of both patterns.
union april june
Will return the months April and June in each year
let fifteenth = (take 1 $ skip 14 day) `inEach` month let third = (take 1 $ skip 2 day) `inEach` month union fifteenth third
Will return the 3rd and the 15th of each month
Queries
instancesFrom :: Day -> DatePattern -> [Day]Source
Get occurrences of an event starting with a given day
intervalsFrom :: Day -> DatePattern -> [Interval Day]Source
Get the date intervals described by the pattern, starting from the specified date.
The intervals range from the first
day included by the pattern to the first day after it, so
a single day d
would be described as (d ... succ d)
and
the interval for a month will go from the 1st of the month
to the 1st of the next month.