Haskell Dynamic Programming on a Tree
Unfortunately, there is a bug in glCons. The employee's fun should get added, not replace the current fun level:
glCons :: Employee -&gt; GuestList -&gt; GuestList
glCons emp (GL a b) = GL (a ++ [emp]) (empFun emp)
          --     ^

But let's stay on glCons. We can expect glCons to be used via foldr. However, the ++ operator leads to quadratic behaviour. When we add a single element, we should therefore use (:) (and reverse, if the order matters):
glCons :: Employee -&gt; GuestList -&gt; GuestList
glCons emp (GL a b) = GL (emp : a) (empFun emp + b)

Other than that the code seems fine.