From dbc223294a39c4881109352f8c420e1917173824 Mon Sep 17 00:00:00 2001
From: Ramakrishnan Muthukrishnan <ram@rkrishnan.org>
Date: Fri, 26 Dec 2014 13:27:50 +0530
Subject: [PATCH] treeFold: two very different implementations.

---
 hw8/Party.hs | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/hw8/Party.hs b/hw8/Party.hs
index 180e45a..2a5cf79 100644
--- a/hw8/Party.hs
+++ b/hw8/Party.hs
@@ -3,6 +3,7 @@ module Party where
 
 import Data.Monoid
 import Employee
+import Data.Tree
 
 -- exercise 1
 -- glCons - a naive way to add an employee to a guest list
@@ -18,3 +19,23 @@ instance Monoid GuestList where
 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
-- 
2.45.2