From 3086656ce60030952362d7f3814ed2c30e9186a6 Mon Sep 17 00:00:00 2001 From: Ramakrishnan Muthukrishnan Date: Fri, 26 Dec 2014 15:21:21 +0530 Subject: [PATCH] bug fix in moreFun and solution to exercise 3 --- hw8/Party.hs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/hw8/Party.hs b/hw8/Party.hs index 2a5cf79..d303b01 100644 --- a/hw8/Party.hs +++ b/hw8/Party.hs @@ -17,8 +17,8 @@ instance Monoid GuestList where -- moreFun moreFun :: GuestList -> GuestList -> GuestList -moreFun g1@(GL _ f1) g2@(GL _ f2) | f1 > f2 = g1 - | otherwise = g2 +moreFun g1 g2 | g1 > g2 = g1 + | otherwise = g2 -- treeFold :: (Tree a -> b -> b) -> b -> Tree a -> b -- treeFold combine e= treeDestructor e f @@ -39,3 +39,15 @@ 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 +-- exercise 3 +-- nextLevel +-- if the big boss comes, no question, his reportee managers are not +-- coming. So, we just take the send list from each pair and concat them. +-- if the big boss is not coming, then we pick the list from the pair that +-- has most fun and concat them all. +nextLevel :: Employee -> [(GuestList, GuestList)] -> (GuestList, GuestList) +nextLevel e lst = + let withBoss = glCons e $ mconcat $ map snd lst + withoutBoss = mconcat $ map (uncurry moreFun) lst + in + (withBoss, withoutBoss) -- 2.37.2