-let rec print ?(l=[]) =
- function
- `Var(n,_) -> print_name l n
- | `N n -> string_of_int n
- | `Match(t,_,bs_lift,bs,args) ->
- "([" ^ print ~l (t :> nf) ^
- " ? " ^ String.concat " | " (List.map (fun (n,t) -> string_of_int n ^ " => " ^ print ~l (lift bs_lift t)) !bs) ^ "] " ^
- String.concat " " (List.map (print ~l) args) ^ ")"
- | `I((n,_),args) -> "(" ^ print_name l n ^ " " ^ String.concat " " (Listx.to_list (Listx.map (print ~l) args)) ^ ")"
- | `Lam(_,nf) ->
- let name = string_of_var (List.length l) in
- "λ" ^ name ^ "." ^ print ~l:(name::l) (nf : nf)
-;;
-