import Tree construct :: Ord a => [a] -> Tree a construct = foldl add Empty add :: Ord a => Tree a -> a -> Tree a add Empty x = Branch x Empty Empty add t@(Branch a t1 t2) x = case compare x a of LT -> Branch a (add t1 x) t2 GT -> Branch a t1 (add t2 x) EQ -> t