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