final commit
[fp1415.git] / week2 / camil / TupleOverloading.icl
1 /**
2 * Mart Lubbers, s4109503
3 * Camil Staps, s4498062
4 */
5
6 implementation module TupleOverloading
7
8 import StdEnv
9
10 instance + (a,b) | + a & + b where
11 + (a,b) (c,d) = (a+c,b+d)
12 instance + (a,b,c) | + a & + b & + c where
13 + (a,b,c) (d,e,f) = (a+d,b+e,c+f)
14
15 instance - (a,b) | - a & - b where
16 - (a,b) (c,d) = (a-c,b-d)
17 instance - (a,b,c) | - a & - b & - c where
18 - (a,b,c) (d,e,f) = (a-d,b-e,c-f)
19
20 instance * (a,b) | * a & * b where
21 * (a,b) (c,d) = (a*c,b*d)
22 instance * (a,b,c) | * a & * b & * c where
23 * (a,b,c) (d,e,f) = (a*d,b*e,c*f)
24
25 instance / (a,b) | / a & / b where
26 / (a,b) (c,d) = (a/c,b/d)
27 instance / (a,b,c) | / a & / b & / c where
28 / (a,b,c) (d,e,f) = (a/d,b/e,c/f)
29
30 instance zero (a,b) | zero a & zero b where
31 zero = (zero, zero)
32 instance zero (a,b,c) | zero a & zero b & zero c where
33 zero = (zero, zero, zero)
34
35 instance one (a,b) | one a & one b where
36 one = (one, one)
37 instance one (a,b,c) | one a & one b & one c where
38 one = (one, one, one)
39
40 instance ~ (a,b) | ~ a & ~ b where
41 ~ (a,b) = (~ a, ~ b)
42 instance ~ (a,b,c) | ~ a & ~ b & ~ c where
43 ~ (a,b,c) = (~ a, ~ b, ~ c)
44
45 Start = (test (1,2), test (1,2,3))
46
47 test a = ( zero + a == a && a == a + zero
48 , a - zero == a && a == ~ (zero - a)
49 , one * a == a && a == a * one
50 , zero * a == zero && zero == a * zero
51 , a / one == a
52 , ~ (~ a) == a
53 )