summaryrefslogtreecommitdiff
path: root/ghc/compiler/ilxGen/tests/test4.hs
blob: 080c6521e3c85bae98959d27567a2d3a22f7cd85 (plain)
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
38
39
40
41
42
43
44
45
46
47
class  Eqq a  where
    evenN :: a -> Bool
    oddN	:: a -> Bool
    evenN x		=  False
    oddN x		=  True


data N = Z | S N

instance Eqq N 
  where
   evenN Z = True
   evenN (S x) = oddN x
   oddN Z = False
   oddN (S x) = evenN x

choose x = if evenN x then "hello world (evenN)\n" else if oddN x then "hello world (oddN)\n" else "no!\n"

add n m = 
   case n of
       Z -> m  
       S nn -> S (add nn m)

mul n m = 
   case n of
       Z -> Z
       S nn -> add m (mul nn m)

pow n m = 
   case m of
       Z -> S Z
       S mm -> mul n (pow n mm)

n1 = S Z
n2 = add n1 n1
n4 = add n2 n2
n6 = add n2 n4
n8 = add n2 n6
n10 = add n2 n8
n16 = add n6 n10
n18 = add n8 n10
n20 = add n4 n16

bign = pow n2 n16
bign1 = add bign n1

main = putStr (choose bign1)