#open "print";; #open "aintv";; let (print_prog : prog -> unit) = let rec print_fun_decl_list = let print_fun_decl = let print_anonymous_fun = let rec print_fpar_list = let print_fpar=function | FPVAL s -> print_string ("!"^s) | FPNDYN s -> print_string ("?"^s) | FPNSTAT s -> print_string s in function | [] -> () | f::[] -> print_fpar f | f::q -> print_fpar f; print_string ","; print_fpar_list q in function (l,e) -> print_string "("; print_fpar_list l; print_string ") = "; print_expr e in function (s,a) -> print_string s; print_anonymous_fun a in function | [] -> () | t::q -> print_fun_decl t; print_string "; "; print_fun_decl_list q in function | ([],e) -> print_expr e; print_string ";;"; print_newline () | (l,e) -> print_string "let "; print_fun_decl_list l; print_string "in "; print_expr e; print_string ";;"; print_newline ();;