| Ast.Case (term, indtype, typ, patterns) ->
sprintf "match %s%s%s with %s"
(pp_term term)
- (match typ with None -> "" | Some t -> sprintf " return %s" (pp_term t))
(match indtype with
| None -> ""
| Some (ty, href_opt) ->
(match debug_printing, href_opt with
| true, Some uri ->
sprintf "(i.e.%s)" (UriManager.string_of_uri uri)
- | _ -> ""))
+ | _ -> ""))
+ (match typ with None -> "" | Some t -> sprintf " return %s" (pp_term t))
(pp_patterns patterns)
| Ast.Cast (t1, t2) -> sprintf "(%s: %s)" (pp_term ~pp_parens:true t1) (pp_term ~pp_parens:true t2)
| Ast.LetIn (var, t1, t2) ->
aux i [] t
in
let rec get_guard i = function
- | [] -> assert false
+ | [] -> (*assert false*) Ast.Implicit
| [term, _] when i = 1 -> term
| _ :: tl -> get_guard (pred i) tl
in
let pvars, pbody = strip i typ in
let _, bbody = strip i body in
term, pvars, pbody, bbody
- | _ -> assert false
+ | term, None ->
+ let pbody = Ast.Implicit in
+ let pvars, bbody = strip i body in
+ term, pvars, pbody, bbody
in
sprintf "%s %s on %s: %s \\def %s"
(pp_term ~pp_parens:false term)
(if fields <> [] then "\n" else "") ^
String.concat ";\n"
(List.map
- (fun (name,ty,coercion) ->
- " " ^ name ^ if coercion then ":>" else ": " ^ pp_term ty) fields)
+ (fun (name,ty,coercion,arity) ->
+ " " ^ name ^
+ if coercion then (":" ^
+ if arity > 0 then string_of_int arity else "" ^ ">") else ": " ^
+ pp_term ty) fields)
let pp_obj = function
| Ast.Inductive (params, types) ->