Time Library Date Normalisation and Arithmetic
Ashley Yakeley
ashley at semantic.org
Fri Jul 29 03:32:50 EDT 2005
In article <Pine.LNX.4.60.0507261531030.24946 at hermes-1.csi.cam.ac.uk>,
Tony Finch <dot at dotat.at> wrote:
> Have you read "Calendrical Calculations"?
> http://www.cup.cam.ac.uk/catalogue/catalogue.asp?isbn=0521777526
Yes, I highly recommend it. It discusses the relevant astronomy and
background of each calendar and avoids the more common pitfalls in
understanding calendars, such as equating the mean tropical year and the
vernal equinox year.
I have time this coming week (between work contracts) during which I
hope to do some more work on TimeLib. There are two big changes I want
to make. Speak now if you thing these are bad ideas:
1. Moving modules to Data.Time.*
I believe this makes more sense because most of the library is
calculation and only functions that obtain the current time and time
zone use the system. We also avoid the existing System.Time so there's
less confusion.
This is not such a big change as far as authoring is concerned.
2. Unifying day types
Right now ModJulianDay and the valid subset of GregorianDay (and other
instances of DayEncoding) are isomorphic and represent the same thing.
This leads to two problems: how to deal with invalid GregorianDays, and
confusion arising from redundancy.
I was doubtless influenced by C/C++, where a field accessor is "cheaper"
in some sense than a function, and so having a separate "broken down"
type makes sense. Haskell is different of course.
I intend to have a single type to represent days, probably called Day or
Date, which will be a newtype of Integer to represent the MJD number.
There will be functions to obtain (year,month,day) values as well as
construct from that (truncating to correct ranges).
This will simplify the type system: the DayEncoding class with its
confusingly-named members will be removed, DayAndTime and ZonedTime will
no longer need a type parameter, and so on. Anyone wishing to create
functionality for some other calendar (Hebrew, for instance), can just
create functions without needing a new type.
--
Ashley Yakeley, Seattle WA
More information about the Libraries
mailing list