1 TEST OF DEFACTORISATION FOR FUNCTIONS THAT DROP
4 > data Boolean = FF | TT
5 > data Pair a b = MkPair a b
6 > data LList alpha = Nill | Conss alpha (LList alpha)
7 > data Nat = Zero | Succ Nat
8 > data Tree x = Leaf x | Node (Tree x) (Tree x)
9 > data A a = MkA a (A a)
11 > append :: LList a -> LList a -> LList a
12 > append xs ys = case xs of
14 > Conss z zs -> Conss z (append zs ys)
16 The following function drops @b@.
18 > flat :: Tree (Pair a b) -> LList a
20 > Leaf (MkPair a b) -> Conss a Nill
21 > Node l r -> append (flat l) (flat r)
23 > fl :: Boolean -> LList Boolean
24 > fl x = flat (Leaf (MkPair TT Zero))