/** * 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 )