
On 2003-06-17 at 13:53BST "Simon Marlow" wrote:
Please comment!
Cheers, Simon
------------------------------------------------------------------------ ---- -- * ClockTime
-- | A representation of absolute time data ClockTime = ClockTime { ctSeconds :: Integer, ctPicoseconds :: Integer }
Two Integer fields seems strange. Either ClockTime { ctPicoseconds :: Integer } would seem to make more sense. I don't see that saving a divide by 10^12 is a big win. But being able to represent times shorter than a picosecond would be. or ClockTime { ctSeconds :: Integer, ctPicoseconds:: real } or, better ClockTime { ctSeconds :: Ratio Integer }
deriving (Eq, Ord, Show, Read)
-- | returns the current absolute time getClockTime :: IO ClockTime
-- | Difference between two 'ClockTime's data TimeDiff = TimeDiff { tdSeconds :: Integer, tdPicoseconds :: Integer }
ditto. Maybe abstract over intervals so that the innards of the two types are another type (after all, ClockTime is just an interval after some instant).
deriving (Eq, Ord, Show, Read)
-- | An empty 'TimeDiff' noTimeDiff :: TimeDiff
-- | Returns the difference between two 'ClockTime's
-- * CalendarTime
data CalendarTime = CalendarTime { ctYear :: Int, ctMonth :: Month, ctDay :: Int, ctHour :: Int, ctMin :: Int, ctSec :: Int, ctPicosec :: Integer, ctTZ :: Timezone }
again query Integer for picoseconds -- some sort of fractional value would be better.
-- | Convert a 'CalendarTime' to a 'ClockTime' -- TODO: can this raise an exception if the CalendarTime does not -- represent a valid time? Or should it return Maybe ClockTime? calendarTimeToClockTime :: CalendarTime -> ClockTime
I'd vote for Maybe since it's more "functional" than exceptions. Jón -- Jón Fairbairn Jon.Fairbairn@cl.cam.ac.uk 31 Chalmers Road jf@cl.cam.ac.uk Cambridge CB1 3SZ +44 1223 570179 (after 14:00 only, please!)