/
/Sample.hs
1 module Sample where
2
3 comp :: (b->c, a->b) -> (a->c)
4 comp (f,g) = f . g
5
6 swap :: (a,b) -> (b,a)
7 swap (x,y) = (y,x)
8
9 assocr :: ((a,b),c) -> (a,(b,c))
10 assocr ((x,y),z) = (x,(y,z))
11
12 distr :: (a, Either b c) -> Either (a,b) (a,c)
13 distr (x, Left y) = Left (x,y)
14 distr (x, Right y) = Right (x,y)
15
16 coswap :: Either a b -> Either b a
17 coswap (Left y) = Right y
18 coswap (Right y) = Left y
19
20 undistr :: Either (a,b) (a,c) -> (a, Either b c)
21 undistr (Left (y,z)) = (y, Left z)
22 undistr (Right (x,z)) = (x, Right z)
23
24 data Nat = Zero | Succ Nat deriving Show
25
26 plus :: (Nat, Nat) -> Nat
27 plus (Zero, z) = z
28 plus (Succ n, z) = Succ (plus (n,z))
29
30 mult :: (Nat, Nat) -> Nat
31 mult (Zero, x) = Zero
32 mult (Succ n, x) = plus (x, mult (n, x))
33
34 fact :: Nat -> Nat
35 fact Zero = Succ Zero
36 fact (Succ n) = mult (Succ n, fact n)
37
38 len :: [a] -> Nat
39 len [] = Zero
40 len (h:t) = Succ (len t)
41
42 fib :: Nat -> Nat
43 fib Zero = Succ Zero
44 fib (Succ Zero) = Succ Zero
45 fib (Succ (Succ x)) = plus (fib x, fib (Succ x))
46
47 cat :: [a] -> [a] -> [a]
48 cat [] l = l
49 cat (h:t) l = h : cat t l
50
51 data Tree a = Leaf | Node a (Tree a) (Tree a) deriving Show
52
53 inorder :: Tree a -> [a]
54 inorder Leaf = []
55 inorder (Node x l r) = cat (inorder l) (x : inorder r)
56
57