diff options
author | Matthieu Sozeau <mattam@mattam.org> | 2013-10-30 19:28:55 +0100 |
---|---|---|
committer | Matthieu Sozeau <mattam@mattam.org> | 2014-05-06 09:58:54 +0200 |
commit | 1c1accf7186438228be9c426db9071aa95a7e992 (patch) | |
tree | 67fae89d05072db6249fdf59325d3691a09dbea6 /pretyping/pretyping.ml | |
parent | 001ff72b2c17fb7b2fcaefa2555c115f0d909a03 (diff) |
Properly reinstate old-style polymorphism in the kernel and pretyping/retyping.
TODO fix interface on knowing_parameters to avoid useless array allocations.
Diffstat (limited to 'pretyping/pretyping.ml')
-rw-r--r-- | pretyping/pretyping.ml | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml index 7777de514..0ef8d3f3c 100644 --- a/pretyping/pretyping.ml +++ b/pretyping/pretyping.ml @@ -545,6 +545,21 @@ let rec pretype resolve_tc (tycon : type_constraint) env evdref lvar t = resj [hj] in let resj = apply_rec env 1 fj candargs args in + let resj = + match evar_kind_of_term !evdref resj.uj_val with + | App (f,args) -> + let f = whd_evar !evdref f in + begin match kind_of_term f with + | Ind _ | Const _ + when isInd f || has_polymorphic_type (fst (destConst f)) + -> + let sigma = !evdref in + let c = mkApp (f,Array.map (whd_evar sigma) args) in + let t = Retyping.get_type_of env sigma c in + make_judge c (* use this for keeping evars: resj.uj_val *) t + | _ -> resj end + | _ -> resj + in inh_conv_coerce_to_tycon loc env evdref resj tycon | GLambda(loc,name,bk,c1,c2) -> |