
"Bayley, Alistair"
From: Ketil Malde [mailto:ketil+haskell@ii.uib.no]
You also need to specify, or let the user specify, the order of arithmetic. I.e. adding a day and then a second is different from doing it the other way around.
Duration arithmetic is not commutative? Can you give some examples please, because I'm not able to imagine any.
This depends on the intended semantics. What is "March 31" + 1 month or "May 31" - 1 month? If this is "April 30", which I find the most intuitive solution, then "March 30" + 1 month + 1 day = "May 1" "March 30" + 1 day + 1 month = "April 30" This means that it's meaningless to add a single interval consisting of several parts expressed in different units. It is meaningful however to 1. add an interval expressed in a single unit, 2. set multiple fields simultaneously to given values. My language Kogut provides only the latter. Setting a field to a value out of range causes wrapping of that field and the appropriate change to larger units. But if a change causes a smaller unit to become out of range without being changed explicitly, then the smaller unit is clamped to its new maximum value instead of wrapping. Without leap seconds this can only happen with the day when larger units change, with leap seconds this also applies to the number of seconds. -- __("< Marcin Kowalczyk \__/ qrczak@knm.org.pl ^^ http://qrnik.knm.org.pl/~qrczak/