Time Libraries Rough Draft

Keean Schupke k.schupke at imperial.ac.uk
Wed Feb 9 14:36:25 EST 2005


Seems very nice, I would still argue that Calendars can be a class as 
all calendars will end up implementing the same (or similar) 
functions... but the work of defining a generalised interface to 
calendars is harder than defining a specific interface to a single 
calendar... In reality I don't think it can be done until several 
calendars have been implemented.

Perhaps defining the library for UTC first, then if other calendars are 
implemented later a generalised interface can be defined later?

    Keean.

Ashley Yakeley wrote:

>This seems to be roughly where we're at with the time libraries. It's 
>now three modules, Clock, LeapSeconds, and Calendar. Most people will 
>have no need for LeapSeconds.
>
>I've added two more things which haven't been discussed much. The first 
>is a getCPUTime function that returns the current "CPU time". This has 
>an arbitrary base, but it doesn't hiccup. The Unix interface for this is 
>a "clock()" function that returns time in some unit, and 
>CLOCKS_PER_SECOND, which is a constant to convert to seconds. I'm 
>assuming there's a Windows equivalent to this.
>
>The second thing is a type-synonym of Rational for Julian dates. Julian 
>dates are a standard representation of UT1, where one unit is one day, 
>and UT1 is a good choice for representing Earth-based times in the far 
>past or future continuously.
>
>
>System.Time.Clock:
>
>  * UTC arithmetic
>
>  * types or type-synonyms for Julian days and dates (for UT1)
>
>  * getting the current UTC time
>
>  * getting the current "CPU time"
>
>System.Time.LeapSeconds:
>
>  * TAI arithmetic
>
>  * leap-second table type
>
>  * conversion between UTC and TAI with table
>
>System.Time.Calendar (largely undiscussed so far):
>
>  * time zones
>
>  * getting the locale time zone
>
>  * converting times to Gregorian "calendrical" format
>
>  * calendrical arithmetic
>    e.g. one month after March 31st
>
>  * possibly "incomplete dates"
>    e.g. "May 1" for all years
>
>  * parsing and showing dates and times
>
>Left for other libraries (standard or user):
>
>  * sunrise/sunset, moon phase, solstices & equinoxes, etc.
>
>  * figuring out time zone from position on Earth
>
>  * civil summertime zone adjustment calculation,
>    interface to zoneinfo database
>
>  * calendar systems other than Gregorian
>
>  * generalised sets over time
>    e.g. "2pm-4pm every 4th Saturday of the month"
>
>
>
>module System.Time.Clock ( ... ) where
>
>  -- | standard Julian count of Earth days
>  type JulianDay = Integer
>
>  newtype DiffTime = MkDiffTime Integer
>
>  timeToSISeconds :: DiffTime -> Rational
>
>  siSecondsToTime :: Rational -> DiffTime
>
>  data UTCTime = MkUTCTime JulianDay DiffTime
>
>  newtype UTCDiffTime = MkUTCDiffTime Integer
>
>  utcTimeToUTCSeconds :: UTCDiffTime -> Rational
>
>  utcSecondsToUTCTime :: Rational -> UTCDiffTime
>
>  addUTCTime :: UTCDiffTime -> UTCTime -> UTCTime
>
>  diffUTCTime :: UTCTime -> UTCTime -> UTCDiffTime
>
>  ...more arithmetic on UTCDiffTime...
>
>  -- | standard Julian dates for UT1, 1 = 1 day
>  type JulianDate = Rational
>
>  getCurrentTime :: IO UTCTime
>
>  getCPUTime :: IO DiffTime
>
>
>-- | most people won't need this module
>module System.Time.LeapSeconds ( ... ) where
>
>  -- | TAI
>  type AbsoluteTime = MkAbsoluteTime Integer
>
>  addAbsoluteTime :: DiffTime -> AbsoluteTime -> AbsoluteTime
>
>  diffAbsoluteTime :: AbsoluteTime -> AbsoluteTime -> DiffTime
>
>  -- | TAI - UTC during this day
>  type LeapSecondTable = JulianDay -> Int
>
>  utcDayLength :: LeapSecondTable -> JulianDay -> DiffTime
>
>  utcToTAITime :: LeapSecondTable -> UTCTime -> TAITime
>
>  taiToUTCTime :: LeapSecondTable -> TAITime -> UTCTime
>
>
>module System.Time.Calendar
>  ... TBD ...
>
>  
>



More information about the Libraries mailing list