let union_data a b =
match a,b with
| Set a , b | b, Set a -> Set (D.union a (set_of b))
| List _ , _ | _ , List _ -> List (list_of a @ list_of b)
| ( (Value _|Data _|Loc _|Range _|Interval _ ) ,
(Value _|Data _|Loc _|Range _|Interval _ ) ) -> List[a;b]