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