packages feed

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))