update to fp2 yay, public and licence
[fp1415.git] / fp1 / week2 / camil / VectorOverloading.icl
1 /**
2 * Mart Lubbers, s4109503
3 * Camil Staps, s4498062
4 */
5
6 implementation module VectorOverloading
7
8 import StdEnv
9
10 :: Vector2 a = {x0 :: a, x1 :: a}
11
12 instance == (Vector2 a) | == a where
13 == a b = a.x0 == b.x0 && a.x1 == b.x1
14 instance zero (Vector2 a) | zero a where
15 zero = {x0 = zero, x1 = zero}
16 instance one (Vector2 a) | one a where
17 one = {x0 = one, x1 = one}
18 instance ~ (Vector2 a) | ~ a where
19 ~ a = {x0 = ~a.x0, x1 = ~a.x1}
20 instance + (Vector2 a) | + a where
21 + a b = {x0 = a.x0 + b.x0, x1 = a.x1 + b.x1}
22 instance - (Vector2 a) | - a where
23 - a b = {x0 = a.x0 - b.x0, x1 = a.x1 - b.x1}
24 instance * (Vector2 a) | * a where
25 * a b = {x0 = a.x0 * b.x0, x1 = a.x1 * b.x1}
26 instance / (Vector2 a) | / a where
27 / a b = {x0 = a.x0 / b.x0, x1 = a.x1 / b.x1}
28
29 Start = test {x0=1,x1=2}
30
31 test a = ( zero + a == a && a == a + zero
32 , a - zero == a && a == ~ (zero - a)
33 , one * a == a && a == a * one
34 , zero * a == zero && zero == a * zero
35 , a / one == a
36 , ~ (~ a) == a
37 )