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