/
Duration.pm
42 lines (33 loc) · 1.03 KB
/
Duration.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
my class Duration is Cool does Real {
has Rat $.tai = 0;
# A linear count of seconds.
method new($tai) { self.bless: tai => $tai.Rat }
method Bridge(Duration:D:) { $!tai.Num }
method Num (Duration:D:) { $!tai.Num }
method Rat (Duration:D:) { $!tai }
method narrow(Duration:D:) { $!tai.narrow }
multi method Str(Duration:D:) { ~$.tai }
multi method perl(Duration:D:) { "Duration.new({$.tai.perl})" }
}
multi sub prefix:<->(Duration:D $a) {
Duration.new: -$a.tai;
}
multi sub infix:<+>(Duration:D $a, Real $b) {
Duration.new: $a.tai + $b;
}
multi sub infix:<+>(Real $a, Duration:D $b) {
Duration.new: $a + $b.tai;
}
multi sub infix:<+>(Duration:D $a, Duration:D $b) {
Duration.new: $a.tai + $b.tai;
}
multi sub infix:<->(Duration:D $a, Real $b) {
Duration.new: $a.tai - $b;
}
multi sub infix:<->(Duration:D $a, Duration:D $b) {
Duration.new: $a.tai - $b.tai;
}
multi sub infix:<%>(Duration:D $a, Real $b) {
Duration.new: $a.tai % $b
}
# vim: ft=perl6 expandtab sw=4