summaryrefslogtreecommitdiff
path: root/week2/camil/VectorOverloading.icl
blob: 4c9c84ac61a6fbd01b821cf69ab23508ff7b497d (plain) (blame)
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
/**
 * Mart Lubbers, s4109503
 * Camil Staps, s4498062
 */

implementation module VectorOverloading

import StdEnv

:: Vector2 a = {x0 :: a, x1 :: a}

instance ==   (Vector2 a) | == a   where 
	== a b = a.x0 == b.x0 && a.x1 == b.x1
instance zero (Vector2 a) | zero a where 
	zero = {x0 = zero, x1 = zero}
instance one  (Vector2 a) | one a  where 
	one = {x0 = one, x1 = one}
instance ~    (Vector2 a) | ~ a    where 
	~ a = {x0 = ~a.x0, x1 = ~a.x1}
instance +    (Vector2 a) | + a    where 
	+ a b = {x0 = a.x0 + b.x0, x1 = a.x1 + b.x1}
instance -    (Vector2 a) | - a    where 
	- a b = {x0 = a.x0 - b.x0, x1 = a.x1 - b.x1}
instance *    (Vector2 a) | * a    where 
	* a b = {x0 = a.x0 * b.x0, x1 = a.x1 * b.x1}
instance /    (Vector2 a) | / a    where 
	/ a b = {x0 = a.x0 / b.x0, x1 = a.x1 / b.x1}

Start  = test {x0=1,x1=2}

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
         )