aboutsummaryrefslogtreecommitdiffhomepage
path: root/pretyping/pretyping.ml
diff options
context:
space:
mode:
authorGravatar Matthieu Sozeau <mattam@mattam.org>2013-10-30 19:28:55 +0100
committerGravatar Matthieu Sozeau <mattam@mattam.org>2014-05-06 09:58:54 +0200
commit1c1accf7186438228be9c426db9071aa95a7e992 (patch)
tree67fae89d05072db6249fdf59325d3691a09dbea6 /pretyping/pretyping.ml
parent001ff72b2c17fb7b2fcaefa2555c115f0d909a03 (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.ml15
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) ->