aboutsummaryrefslogtreecommitdiff
path: root/tactics
diff options
context:
space:
mode:
authorMatthieu Sozeau2015-01-14 18:05:40 +0530
committerMatthieu Sozeau2015-01-15 18:59:00 +0530
commit004b7f53cd9a9f8bd78156310f516af8fe42554b (patch)
treeb207cc0bcec74dbdf362850464e35d95d7d467ea /tactics
parent6965121294e2a083c0111d6ff3da2158ed6f4a7a (diff)
Optionally allow eta-conversion during unification for type classes.
Off by default as it can be backwards-incompatible (e.g. produces loop in the library without an additional Typeclasses Opaque directive in RelationPairs).
Diffstat (limited to 'tactics')
-rw-r--r--tactics/class_tactics.ml17
1 files changed, 16 insertions, 1 deletions
diff --git a/tactics/class_tactics.ml b/tactics/class_tactics.ml
index 44204a9f0e..9d49a7bbb7 100644
--- a/tactics/class_tactics.ml
+++ b/tactics/class_tactics.ml
@@ -32,6 +32,21 @@ open Hints
let typeclasses_debug = ref false
let typeclasses_depth = ref None
+let typeclasses_modulo_eta = ref false
+let set_typeclasses_modulo_eta d = (:=) typeclasses_modulo_eta d
+let get_typeclasses_modulo_eta () = !typeclasses_modulo_eta
+
+open Goptions
+
+let set_typeclasses_modulo_eta =
+ declare_bool_option
+ { optsync = true;
+ optdepr = false;
+ optname = "do typeclass search modulo eta conversion";
+ optkey = ["Typeclasses";"Modulo";"Eta"];
+ optread = get_typeclasses_modulo_eta;
+ optwrite = set_typeclasses_modulo_eta; }
+
(** We transform the evars that are concerned by this resolution
(according to predicate p) into goals.
Invariant: function p only manipulates and returns undefined evars *)
@@ -65,7 +80,7 @@ let auto_core_unif_flags st freeze = {
frozen_evars = freeze;
restrict_conv_on_strict_subterms = false; (* ? *)
modulo_betaiota = true;
- modulo_eta = false;
+ modulo_eta = !typeclasses_modulo_eta;
}
let auto_unif_flags freeze st =