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
43
44
45
46
47
48
49
50
51
52
53
|
/**
* Mart Lubbers, s4109503
* Camil Staps, s4498062
*/
implementation module TupleOverloading
import StdEnv
instance + (a,b) | + a & + b where
+ (a,b) (c,d) = (a+c,b+d)
instance + (a,b,c) | + a & + b & + c where
+ (a,b,c) (d,e,f) = (a+d,b+e,c+f)
instance - (a,b) | - a & - b where
- (a,b) (c,d) = (a-c,b-d)
instance - (a,b,c) | - a & - b & - c where
- (a,b,c) (d,e,f) = (a-d,b-e,c-f)
instance * (a,b) | * a & * b where
* (a,b) (c,d) = (a*c,b*d)
instance * (a,b,c) | * a & * b & * c where
* (a,b,c) (d,e,f) = (a*d,b*e,c*f)
instance / (a,b) | / a & / b where
/ (a,b) (c,d) = (a/c,b/d)
instance / (a,b,c) | / a & / b & / c where
/ (a,b,c) (d,e,f) = (a/d,b/e,c/f)
instance zero (a,b) | zero a & zero b where
zero = (zero, zero)
instance zero (a,b,c) | zero a & zero b & zero c where
zero = (zero, zero, zero)
instance one (a,b) | one a & one b where
one = (one, one)
instance one (a,b,c) | one a & one b & one c where
one = (one, one, one)
instance ~ (a,b) | ~ a & ~ b where
~ (a,b) = (~ a, ~ b)
instance ~ (a,b,c) | ~ a & ~ b & ~ c where
~ (a,b,c) = (~ a, ~ b, ~ c)
Start = (test (1,2), test (1,2,3))
test a = ( zero + a == a && a == a + zero
, a - zero == a && a == ~ (zero - a)
, one * a == a && a == a * one
, zero * a == zero && zero == a * zero
, a / one == a
, ~ (~ a) == a
)
|