let rec flatten xs = function | Tapp( f , es ) when f = M.union -> List.fold_left flatten xs es | Tapp( f , [] ) when f = M.empty -> xs | t -> t::xs