let union_data a b =
    match a,b with
      | Set a , b | b, Set a -> Set (F.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]