+ | Fold (k, p_base, names, p_rec) ->
+ let acc = match names with acc :: _ -> acc | _ -> assert false in
+ sprintf "\\FOLD %s \\[%s\\] \\LAMBDA %s \\[%s\\]"
+ (pp_fold_kind k) (pp_term p_base) acc (pp_term p_rec)
+ | Default (p_some, p_none) ->
+ sprintf "\\DEFAULT \\[%s\\] \\[%s\\]" (pp_term p_some) (pp_term p_none)
+
+and pp_fold_kind = function
+ | `Left -> "left"
+ | `Right -> "right"