update to fp2 yay, public and licence
[fp1415.git] / fp1 / week2 / mart / TupleOverloading.icl
1 implementation module TupleOverloading
2
3 import StdEnv
4
5 instance + (a,b) | + a & + b where
6 + (a,b) (c,d) = (a+c,b+d)
7 instance + (a,b,c) | + a & + b & + c where
8 + (a,b,c) (d,e,f) = (a+d,b+e,c+f)
9
10
11 instance - (a,b) | - a & - b where
12 - (a,b) (c,d) = (a-c,b-d)
13 instance - (a,b,c) | - a & - b & - c where
14 - (a,b,c) (d,e,f) = (a-d,b-e,c-f)
15
16 instance * (a,b) | * a & * b where
17 * (a,b) (c,d) = (a*c,b*d)
18 instance * (a,b,c) | * a & * b & * c where
19 * (a,b,c) (d,e,f) = (a*d,b*e,c*f)
20
21 instance / (a,b) | / a & / b where
22 / (a,b) (c,d) = (a/c,b/d)
23 instance / (a,b,c) | / a & / b & / c where
24 / (a,b,c) (d,e,f) = (a/d,b/e,c/f)
25
26 instance zero (a,b) | zero a & zero b where
27 zero = (zero,zero)
28 instance zero (a,b,c) | zero a & zero b & zero c where
29 zero = (zero,zero,zero)
30
31 instance one (a,b) | one a & one b where
32 one = (one,one)
33 instance one (a,b,c) | one a & one b & one c where
34 one = (one,one,one)
35
36 instance ~ (a,b) | ~ a & ~ b where
37 ~ (a,b) = (~a,~b)
38 instance ~ (a,b,c) | ~ a & ~ b & ~ c where
39 ~ (a,b,c) = (~a,~b,~c)
40
41 Start = (test (1,2), test (1,2,3))
42
43 test a = ( zero + a == a && a == a + zero
44 , a - zero == a && a == ~ (zero - a)
45 , one * a == a && a == a * one
46 , zero * a == zero && zero == a * zero
47 , a / one == a
48 , ~ (~ a) == a
49 )