Skip to content

Instantly share code, notes, and snippets.

@andres-erbsen
Created December 5, 2018 21:05
Show Gist options
  • Save andres-erbsen/e58394178d02120500e4661735f797ae to your computer and use it in GitHub Desktop.
Save andres-erbsen/e58394178d02120500e4661735f797ae to your computer and use it in GitHub Desktop.
Definition bag := nat.
Existing Class bag.
Instance : bag := 5.
Instance : bag := 6.
Instance : bag := 7.
Instance : bag := 8.
Instance : bag := 9.
Ltac tryeach cls t :=
let picked := fresh "picked" in
unshelve (idtac; let v := open_constr:(let picked : cls := _ in _) in exact v);
[ typeclasses eauto |
let picked := eval unfold picked in picked in
let picked := eval unfold picked in picked in
t picked
];
clear picked.
Goal exists x, x=7.
eexists.
Set Typeclasses Debug.
tryeach bag ltac:(fun x => exact (eq_refl x)).
Qed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment