Fork me on GitHub
#meander
<
2022-09-20
>
wilkerlucio17:09:41

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)}

wilkerlucio17:09:03

in this case I was trying to make a meander expression that removes every :all keys from all maps it can find

timothypratley15:09:45

(let [f (s/bottom-up
          (s/rewrite
            {:all _ & ?m}
            ?m
            ?else
            ?else))]
  (f {:foo {:all "here"}}))
^^ this is how I'd do it 🙂

timothypratley15:09:37

I think your version should work fine if you either used ~ to execute dissoc, or used match instead of rewrite

timothypratley15:09:17

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 {}}

timothypratley15:09:12

But IMO the & thing is nicer as it keeps everything as a pattern 😉

wilkerlucio18:09:18

gotcha, thanks you very much, works great 😄

👍 1
😎 1