+++ /dev/null
---!!! a file mailed us by Ryzard Kubiak. This provides a good test of the code
---!!! handling type signatures and recursive data types.
-
-module ShouldSucceed where
-
-data Boolean = FF | TT
-data Pair a b = Mkpair a b
-data List alpha = Nil | Cons alpha (List alpha)
-data Nat = Zero | Succ Nat
-data Tree t = Leaf t | Node (Tree t) (Tree t)
-
-idb :: Boolean -> Boolean
-idb x = x
-
-
-swap :: Pair a b -> Pair b a
-swap t = case t of
- Mkpair x y -> Mkpair y x
-
-neg :: Boolean -> Boolean
-neg b = case b of
- FF -> TT
- TT -> FF
-
-nUll :: List alpha -> Boolean
-nUll l = case l of
- Nil -> TT
- Cons y ys -> FF
-
-idl :: List a -> List a
-idl xs = case xs of
- Nil -> Nil
- Cons y ys -> Cons y (idl ys)
-
-add :: Nat -> Nat -> Nat
-add a b = case a of
- Zero -> b
- Succ c -> Succ (add c b)
-
-app :: List alpha -> List alpha -> List alpha
-app xs zs = case xs of
- Nil -> zs
- Cons y ys -> Cons y (app ys zs)
-
-lEngth :: List a -> Nat
-lEngth xs = case xs of
- Nil -> Zero
- Cons y ys -> Succ(lEngth ys)
-
-before :: List Nat -> List Nat
-before xs = case xs of
- Nil -> Nil
- Cons y ys -> case y of
- Zero -> Nil
- Succ n -> Cons y (before ys)
-
-rEverse :: List alpha -> List alpha
-rEverse rs = case rs of
- Nil -> Nil
- Cons y ys -> app (rEverse ys) (Cons y Nil)
-
-
-flatten :: Tree alpha -> List alpha
-flatten t = case t of
- Leaf x -> Cons x Nil
- Node l r -> app (flatten l) (flatten r)
-
-sUm :: Tree Nat -> Nat
-sUm t = case t of
- Leaf t -> t
- Node l r -> add (sUm l) (sUm r)
-
-