(CicUnification.UnificationFailure msg) -> raise (RefineFailure msg)
| (CicUnification.Uncertain msg) -> raise (Uncertain msg)
;;
+
+let enrich f =
+ function
+ RefineFailure msg -> raise (RefineFailure (f msg))
+ | Uncertain msg -> raise (Uncertain (f msg))
+ | _ -> assert false
let rec split l n =
match (l,n) with
) tl ([],subst',metasenv',ugraph1)
in
let tl',applty,subst''',metasenv''',ugraph3 =
+ try
eat_prods true subst'' metasenv'' context
hetype tlbody_and_type ugraph2
+ with
+ exn ->
+ enrich
+ (fun msg ->
+ lazy ("The application " ^
+ CicMetaSubst.ppterm_in_context subst'' t context ^
+ " is not well typed:\n" ^ Lazy.force msg)) exn
in
C.Appl (he'::tl'), applty,subst''',metasenv''',ugraph3
| C.Appl _ -> raise (RefineFailure (lazy "Appl: no arguments"))
in
match coer with
| CoercGraph.NoCoercion
- | CoercGraph.NotHandled _ -> raise exn
+ | CoercGraph.NotHandled _ ->
+ let msg =
+ lazy ("The term " ^
+ CicMetaSubst.ppterm_in_context subst hete
+ context ^ " has type " ^
+ CicMetaSubst.ppterm_in_context subst hety
+ context ^ " but is here used with type " ^
+ CicMetaSubst.ppterm_in_context subst s context)
+ in
+ enrich (fun _ -> msg) exn
| CoercGraph.NotMetaClosed ->
raise (Uncertain (lazy "Coercions on meta"))
| CoercGraph.SomeCoercion c ->