3 comp :: (b->c, a->b) -> (a->c)
9 assocr :: ((a,b),c) -> (a,(b,c))
10 assocr ((x,y),z) = (x,(y,z))
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)
16 coswap :: Either a b -> Either b a
17 coswap (Left y) = Right y
18 coswap (Right y) = Left y
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)
24 data Nat = Zero | Succ Nat deriving Show
26 plus :: (Nat, Nat) -> Nat
28 plus (Succ n, z) = Succ (plus (n,z))
30 mult :: (Nat, Nat) -> Nat
32 mult (Succ n, x) = plus (x, mult (n, x))
36 fact (Succ n) = mult (Succ n, fact n)
40 len (h:t) = Succ (len t)
44 fib (Succ Zero) = Succ Zero
45 fib (Succ (Succ x)) = plus (fib x, fib (Succ x))
47 cat :: [a] -> [a] -> [a]
49 cat (h:t) l = h : cat t l
51 data Tree a = Leaf | Node a (Tree a) (Tree a) deriving Show
53 inorder :: Tree a -> [a]
55 inorder (Node x l r) = cat (inorder l) (x : inorder r)