Closed vzaliva closed 3 years ago
I agree these notations are currently a pain to maintain. I'm strongly considering removing them and just using ext-lib, but we still have to be especially careful about setting the right version bounds because of the recent fluctuations in notations and definitions, which can break our code.
At the moment branch master works only with coq-ext-lib.0.10.3
(unless one is careful to avoid the notation clash).
Hm, this is actually somewhat difficult to fix because type classes behave differently with computation. The problem is that cbn
reduces @bind _ Monad_itree
back to ITree.bind
. I tried setting Monad_itree
to simpl never
, but this blocks proofs by computation. In particular uses of tau_steps
in tutorial/Interoduction.v
no longer do anything.
tau_steps
to manually unfold, but this is pretty tedious.ITree.bind
back to @bind _ Monad_itree
, but that seems extremely fragile; it very easily reduces back to ITree.bind
.Monad
record with two unwrapped classes for bind
and ret
.I have to experiment more with that.
Monad
class from ext-lib. Marking the Monad_itree
instance simpl never
blocks computation, and when that happens it is really cumbersome to unstick it, because the dictionary might not actually be visible in the goal so you have to find unfold definitions by hand.
Currently module ITreeNotations re-defines some standard monad notations already defined in ext-lib:
The recent change in ext-lib changed levels for these notations and now they are conflicting with itrees' notations for projects which depend on both (e.g. Vellvm, Helix).
Additionally, this notation in trees is defined as
cat
while in ext-lib it ismcompose
It would be nice to switch to ext-lib notations everywhere.