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