import Data.Monoid
import Employee
+import Data.Tree
-- exercise 1
-- glCons - a naive way to add an employee to a guest list
moreFun :: GuestList -> GuestList -> GuestList
moreFun g1@(GL _ f1) g2@(GL _ f2) | f1 > f2 = g1
| otherwise = g2
+
+-- treeFold :: (Tree a -> b -> b) -> b -> Tree a -> b
+-- treeFold combine e= treeDestructor e f
+-- where f _ ts = let vs = map (\t1 -> treeFold combine e t1) ts in
+-- foldr (\acc v -> combine v acc) e vs
+-- treeDestructor _ f1 t1 = case t1 of
+-- (Node v xs) -> f1 v xs
+
+
+-- treeFold :: (t1 -> [b] -> b) -> Tree t1 -> b
+-- treeFold combine = treeDestructor f
+-- where f v ts = let vs = map (\t -> treeFold combine t) ts in
+-- combine v vs
+-- treeDestructor f1 t1 = case t1 of
+-- (Node v xs) -> f1 v xs
+treeFold :: (b -> a -> b) -> b -> Tree a -> b
+treeFold f e (Node v []) = f e v
+treeFold f e (Node v ts) = let b = foldr (\t acc -> treeFold f acc t) e ts
+ in
+ f b v