let unions l =
  let rec unions_aux l s =
    match l with
      | [] -> s
      | a::m -> unions_aux m (union a s)
  in
  match l with
    | [] -> empty
    | a::m -> unions_aux m a