let rec flatten xs = function | Tapp( "zunion" , es ) -> List.fold_left flatten xs es | Tapp( "zempty" , [] ) -> xs | t -> t::xs