[Haskell-cafe] ANNOUNCE: time-recurrence-0.9.0
Chris Heller
hellertime at gmail.com
Fri Aug 3 05:15:58 CEST 2012
I am happy to announce a new version of time-recurrence, a library of
functions for generating recurring sequences of dates:
http://hackage.haskell.org/package/time-recurrence
New in version 0.9.0 is a redesigned top layer API. Previously
recurrences were described by combining generating functions to get
the desired effect.
This was quite functional but had the drawback that a recurrence was
difficult to persist outside of the Haskell run-time. As of version
0.9.0 this limitation is no more. Now the actual recurrence rule is
defined by combining types into a data structure which can either be
persisted (and later read back) or evaluated into a function to
generate dates. This also means that the type system now enforces
correct rule creation!
Additionally some convenience functions are available to construct the
recurrence rule in a format familiar to previous users of this
library.
Here is a familiar example:
Generate the 15th and 30th of the month, but only during the work week:
> jan2011 = ptime "Sat, 01 Jan 2012 00:00:00 -0400"
> jan2012 = ptime "Sun, 01 Jan 2013 00:00:00 -0400"
> takeWhile (<= jan2013) $ starting jan2012 $
> recur monthly
> >==> enum (Days [15,30])
> >==> filter (WeekDays [Monday .. Friday])
[2011-02-15 04:00:00 UTC
,2011-03-15 04:00:00 UTC, 2011-03-30 04:00:00 UTC
,2011-04-15 04:00:00 UTC
,2011-05-30 04:00:00 UTC
,2011-06-15 04:00:00 UTC, 2011-06-30 04:00:00 UTC
,2011-07-15 04:00:00 UTC
,2011-08-15 04:00:00 UTC, 2011-08-30 04:00:00 UTC
,2011-09-15 04:00:00 UTC, 2011-09-30 04:00:00 UTC
,2011-11-15 04:00:00 UTC, 2011-11-30 04:00:00 UTC
,2011-12-15 04:00:00 UTC, 2011-12-30 04:00:00 UTC
]
On the road to version 1.0, I plan to add another type layer which
strictly enforces RFC 5545 section 3.3.10.
As always I encourage feedback, criticism, suggestions and pull
requests. I would especially welcome any type system experts feedback:
quite a few GHC extensions needed to be turned on to get this to work.
-Chris
More information about the Haskell-Cafe
mailing list