diff options
author | 2008-01-30 04:13:26 +0000 | |
---|---|---|
committer | 2008-01-30 04:13:26 +0000 | |
commit | d02a2539ef38aab2ce0b0510d946423f16d61e9d (patch) | |
tree | 4a907a0abf322737859e07a5d184a14d51e36e64 /pretyping | |
parent | e59c9aa09523759787f2c227a3a128fb5faccd99 (diff) |
Debug 0-ary typeclasses support, use new redefinition support for default tactic
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@10482 85f007b7-540e-0410-9357-904b9bb8a0f7
Diffstat (limited to 'pretyping')
-rw-r--r-- | pretyping/typeclasses.ml | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/pretyping/typeclasses.ml b/pretyping/typeclasses.ml index a1183c97b..febfb0494 100644 --- a/pretyping/typeclasses.ml +++ b/pretyping/typeclasses.ml @@ -219,6 +219,7 @@ let solve_instanciation_problem = ref (fun _ _ _ _ -> assert false) let resolve_typeclass env ev evi (evd, defined as acc) = try + assert(evi.evar_body = Evar_empty); !solve_instanciation_problem env evd ev evi with Exit -> acc @@ -269,16 +270,22 @@ let is_implicit_arg k = | InternalHole -> true | _ -> false +let destClassApp c = + match kind_of_term c with + | App (ki, args) when isInd ki -> + Some (destInd ki, args) + | _ when isInd c -> Some (destInd c, [||]) + | _ -> None + let resolve_typeclasses ?(check=true) env sigma evd = let evm = Evd.evars_of evd in let tc_evars = let f ev evi acc = let (l, k) = Evd.evar_source ev evd in if not check || is_implicit_arg k then - match kind_of_term evi.evar_concl with - | App(ki, args) when isInd ki -> - if is_class (destInd ki) then Evd.add acc ev evi - else acc + match destClassApp evi.evar_concl with + | Some (i, args) when is_class i -> + Evd.add acc ev evi | _ -> acc else acc in Evd.fold f evm Evd.empty |