data Tree a = Leaf a | Branch [Tree a] instance (Eq a) => Eq (Tree a) where (Leaf a) == (Leaf b) = a == b (Branch a) == (Branch b) = a == b _ == _ = False


module Overload where data Tree a = Leaf a | Branch (Tree a) (Tree a) deriving (Show) instance Num (Tree a) where a@(Leaf _) + b@(Leaf _) = Branch a b a@(Leaf _) + b@(Branch _ _) = Branch a b a@(Branch _ _) + b@(Leaf _) = Branch a b a@(Branch _ _) + b@(Branch _ _) = Branch a b