DrHylo-0.0.1: Sample.hs
module Sample where
comp :: (b->c, a->b) -> (a->c)
comp (f,g) y = f (g y)
swap :: (a,b) -> (b,a)
swap (x,y) = (y,x)
assocr :: ((a,b),c) -> (a,(b,c))
assocr ((x,y),z) = (x,(y,z))
distr :: (a, Either b c) -> Either (a,b) (a,c)
distr (x, Left y) = Left (x,y)
distr (x, Right y) = Right (x,y)
coswap :: Either a b -> Either b a
coswap (Left y) = Right y
coswap (Right y) = Left y
undistr :: Either (a,b) (a,c) -> (a, Either b c)
undistr (Left (y,z)) = (y, Left z)
undistr (Right (x,z)) = (x, Right z)
data Nat = Zero | Succ Nat deriving Show
plus :: (Nat, Nat) -> Nat
plus (Zero, z) = z
plus (Succ n, z) = Succ (plus (n,z))
mult :: (Nat, Nat) -> Nat
mult (Zero, x) = Zero
mult (Succ n, x) = plus (x, mult (n, x))
fact :: Nat -> Nat
fact Zero = Succ Zero
fact (Succ n) = mult (Succ n, fact n)
len :: [a] -> Nat
len [] = Zero
len (h:t) = Succ (len t)
fib :: Nat -> Nat
fib Zero = Succ Zero
fib (Succ Zero) = Succ Zero
fib (Succ (Succ x)) = plus (fib x, fib (Succ x))
cat :: [a] -> [a] -> [a]
cat [] l = l
cat (h:t) l = h:(cat t l)
data Tree a = Leaf | Node a (Tree a) (Tree a)
inorder :: Tree a -> [a]
inorder Leaf = []
inorder (Node x l r) = cat (inorder l) (x:(inorder r))