I'm getting a bit lost following precisely what's being proposed. What
I'm sort of feeling is that there are two fundamental immutable types
needed: Instants and Durations:
multi sub infix:<-> (Instant, Instant --> Duration)
multi sub infix:<+> (Instant, Duration --> Instant)
multi sub infix:<-> (Instant, Duration --> Instant)
, a bunch of implementation-defined constants:
our Instant $unix_epoch is const = ...;
...
, plus a bunch of formatting/coercion classes/functions (some of which
understand time zones, etc):
class DateTime is Instant { ... };
In general we wouldn't expose details such as the actual internal
implementation epoch; or what datatype is used to store Instants and
Durations. One thing we might want is a way to parameterize them to
define the precision and range that the user desires for specific
concrete objects -- if we could do this using human-friendly units (as
postfix functions), that would be good:
my Duration[ :precision(1 ns), :min(0), :max(10 weeks) ] $delta;
Is this a reasonable summary?