--- /dev/null
+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)