
getDateGregorian :: JulianDay -> CalendarDate
-- much less useful, but easy to write getDateJulian :: JulianDay -> CalendarDate
I can see a number of applications for calendar dates by themselves and perhaps times of day also. This also might be more internationalisation-friendly, as users can create their own calendar types and still use TimeOfDay.
On the other hand, it adds two levels of construction to CalendarTime.
Don't forget decimal time (100 seconds = 1 minute, 100 minutes = 1 hour, 10 hours = 1 day)... I still feel using a simple single unit counter (picoseconds?) and then defining a class allowing different representations is the most flexible way to do this... Ignoring the TAI/UTC issue, this would be how I would define the interface: type TAI = Word128 getTAI :: IO TAI -- or Integer or Word64? class Calendar c where fromTAI :: TAI -> c toTAI :: c -> TAI data Gregorian = Gregorian { second :: Int, minute :: Int, hour :: Int, dayOfMonth :: Int, dayOfWeek :: Int, weekOfYear :: Int, monthOfYear :: Int, Year :: Int } -- enumerations may make more sense for dayOfWeek/monthOfYear This allows users to implement alternative arrangements and convert to and from TAI. Keean.