hello, I'm trying to use a rewrite strategy, but I notice that different than when using find or search, I can't have a clojure expression replacement, for example:
(let [f
(m*/bottom-up
(m*/attempt
(m*/rewrite
{:all (m/pred some?) :as ?m}
(dissoc ?m :all))))]
(f {:foo {:all "here"}}))
=> {:foo (dissoc {:all "here"} :all)}
in this case I was trying to make a meander expression that removes every :all keys from all maps it can find
(let [f (s/bottom-up
(s/rewrite
{:all _ & ?m}
?m
?else
?else))]
(f {:foo {:all "here"}}))
^^ this is how I'd do it 🙂=> {:foo {}}
I think your version should work fine if you either used ~ to execute dissoc, or used match instead of rewrite
i.e.:
(let [f
(s/bottom-up
(s/attempt
(s/rewrite
{:all (m/pred some?) :as ?m}
~(dissoc ?m :all))))]
(f {:foo {:all "here"}}))
=> {:foo {}}
But IMO the & thing is nicer as it keeps everything as a pattern 😉
gotcha, thanks you very much, works great 😄