1 > data Boolean = FF | TT
2 > data Pair a b = Mkpair a b
3 > data LList alpha = Nill | Conss alpha (LList alpha)
4 > data Nat = Zero | Succ Nat
5 > data Tree t = Leaf t | Node (Tree t) (Tree t)
6 > data A a = MkA a (A a)
7 > data Foo baz = MkFoo (Foo (Foo baz))
9 > append1 :: LList a -> LList a -> LList a
10 > append1 xs ys = append2 xs
12 > append2 xs = case xs of
14 > Conss x xs -> Conss x (append3 xs)
15 > append3 xs = case xs of
17 > Conss x xs -> Conss x (append2 xs)
26 > hdb :: LList (LList b) -> LList b
29 > append :: [a] -> [a] -> [a]
31 > append (x:xs) ys = x:(append xs ys)
34 > f y = append x (f y)
35 > where x = append x (f y)
37 > app :: LList a -> LList a -> LList a
38 > app Nill Nill = Nill
39 > app xs ys = case xs of
41 > Conss z zs -> Conss z (app zs ys)
43 > app :: LList a -> LList a -> LList a
44 > app xs ys = case xs of
49 > where ap = case xs of
51 > Conss z zs -> Conss z (app zs ys)
53 > app :: LList a -> LList a -> LList a
54 > app xs ys = case xs of
57 > Conss u us -> ap xs ys
58 > Conss a as -> ap xs ys
60 > ap xs ys = case xs of
62 > Conss z zs -> Conss z (app zs ys)
64 > ap :: LList a -> LList a -> LList a
65 > ap xs ys = case xs of
67 > Conss z zs -> Conss z (ap zs ys)
69 > app :: LList a -> LList a -> LList a
70 > app xs ys = case xs of
73 > Conss u us -> ap xs ys
74 > Conss a as -> ap xs ys