let rec pp_mach_internal may_need_space ppf = function
| Atom str ->
let str' = maybe_esc_str str in
let new_may_need_space = str' == str in
if may_need_space && new_may_need_space then pp_print_string ppf " ";
pp_print_string ppf str';
new_may_need_space
| List (h :: t) ->
pp_print_string ppf "(";
let may_need_space = pp_mach_internal false ppf h in
pp_mach_rest may_need_space ppf t;
false
| List [] -> pp_print_string ppf "()"; false
and pp_mach_rest may_need_space ppf = function
| h :: t ->
let may_need_space = pp_mach_internal may_need_space ppf h in
pp_mach_rest may_need_space ppf t
| [] -> pp_print_string ppf ")"