summaryrefslogtreecommitdiff
path: root/files/practicum/TupleOverloading.icl
blob: 2d342762a53594853dfcdf37b9acb7f824b3abe6 (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
implementation module TupleOverloading

import StdEnv

instance +    (a,b)   | + a & + b                where
instance +    (a,b,c) | + a & + b & + c          where


instance -    (a,b)   | - a & - b                where
instance -    (a,b,c) | - a & - b & - c          where

instance *    (a,b)   | * a & * b                where
instance *    (a,b,c) | * a & * b & * c          where

instance /    (a,b)   | / a & / b                where
instance /    (a,b,c) | / a & / b & / c          where

instance zero (a,b)   | zero a & zero b          where
instance zero (a,b,c) | zero a & zero b & zero c where

instance one  (a,b)   | one a & one b            where
instance one  (a,b,c) | one a & one b & one c    where

instance ~    (a,b)   | ~ a & ~ b                where
instance ~    (a,b,c) | ~ a & ~ b & ~ c          where

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
         )