let list2_to_string (f : '-> string) (separator : string) : 'a list -> string =
  let rec list2_to_string_rec = function
      [] -> ""
    | [h] -> f h        
    | h::t ->
         "pair("^(f h)^separator^(list2_to_string_rec t)^")"
  in
  list2_to_string_rec