aboutsummaryrefslogtreecommitdiffhomepage
path: root/printing/ppconstr.ml
diff options
context:
space:
mode:
Diffstat (limited to 'printing/ppconstr.ml')
-rw-r--r--printing/ppconstr.ml38
1 files changed, 38 insertions, 0 deletions
diff --git a/printing/ppconstr.ml b/printing/ppconstr.ml
index eead3a684..1ea502539 100644
--- a/printing/ppconstr.ml
+++ b/printing/ppconstr.ml
@@ -279,6 +279,8 @@ end) = struct
| CPatDelimiters (_,k,p) ->
pr_delimiters k (pr_patt mt lsimplepatt p), 1
+ | CPatCast _ ->
+ assert false
in
let loc = cases_pattern_expr_loc p in
pr_with_comments loc
@@ -298,6 +300,7 @@ end) = struct
let begin_of_binder = function
LocalRawDef((loc,_),_) -> fst (Loc.unloc loc)
| LocalRawAssum((loc,_)::_,_,_) -> fst (Loc.unloc loc)
+ | LocalPattern(loc,_,_) -> fst (Loc.unloc loc)
| _ -> assert false
let begin_of_binders = function
@@ -346,6 +349,8 @@ end) = struct
| _ -> c, CHole (Loc.ghost, None, Misctypes.IntroAnonymous, None) in
surround (pr_lname na ++ pr_opt_type pr_c topt ++
str":=" ++ cut() ++ pr_c c)
+ | LocalPattern _ ->
+ assert false
let pr_undelimited_binders sep pr_c =
prlist_with_sep sep (pr_binder_among_many pr_c)
@@ -357,6 +362,8 @@ end) = struct
pr_com_at n ++ kw() ++ pr_binder false pr_c (nal,k,t)
| LocalRawAssum _ :: _ as bdl ->
pr_com_at n ++ kw() ++ pr_undelimited_binders sep pr_c bdl
+ | LocalPattern (loc,p,tyo) :: _ ->
+ str "'" ++ pr_patt ltop p
| _ -> assert false
let pr_binders_gen pr_c sep is_open =
@@ -430,6 +437,7 @@ end) = struct
let names_of_binder = function
| LocalRawAssum (nal,_,_) -> nal
| LocalRawDef (_,_) -> []
+ | LocalPattern _ -> assert false
in let ids = List.flatten (List.map names_of_binder bl) in
if List.length ids > 1 then
spc() ++ str "{" ++ keyword "struct" ++ spc () ++ pr_id id ++ str"}"
@@ -530,6 +538,21 @@ end) = struct
(pr_cofixdecl (pr mt) (pr_dangling_with_for mt pr)) (snd id) cofix),
lfix
)
+ | CProdN
+ (_,
+ [([(_,Name n)],_,_)],
+ CCases
+ (_,LetPatternStyle,None,[(CRef(Ident(_,m),None),None,None)],
+ [(_,[(_,[p])],a)]))
+ when
+ Id.equal m n &&
+ not (Id.Set.mem n (Topconstr.free_vars_of_constr_expr a)) ->
+ return (
+ hov 0 (
+ keyword "forall" ++ spc () ++ str "'" ++ pr_patt ltop p ++
+ str "," ++ pr spc ltop a),
+ llambda
+ )
| CProdN _ ->
let (bl,a) = extract_prod_binders a in
return (
@@ -539,6 +562,21 @@ end) = struct
str "," ++ pr spc ltop a),
lprod
)
+ | CLambdaN
+ (_,
+ [([(_,Name n)],_,_)],
+ CCases
+ (_,LetPatternStyle,None,[(CRef(Ident(_,m),None),None,None)],
+ [(_,[(_,[p])],a)]))
+ when
+ Id.equal m n &&
+ not (Id.Set.mem n (Topconstr.free_vars_of_constr_expr a)) ->
+ return (
+ hov 0 (
+ keyword "fun" ++ spc () ++ str "'" ++ pr_patt ltop p ++
+ pr_fun_sep ++ pr spc ltop a),
+ llambda
+ )
| CLambdaN _ ->
let (bl,a) = extract_lam_binders a in
return (