let rec pp_fold_op nil op pp fmt = function
| [] -> Format.pp_print_string fmt nil
| [x] -> pp fmt x
| [x;y] -> Format.fprintf fmt "%a@ %s@ %a" pp x op pp y ;
| x::xs -> Format.fprintf fmt "%a@ %s@ (%a)" pp x op (pp_fold_op nil op pp) xs