Fork me on GitHub
#meander
<
2022-02-05
>
Richie23:02:44

I've got some working code but I'm wondering how I could move the (m/app :keys ?entries) from the subst and into the pattern. Working code:

(m/rewrite {:pred-map {'list {:min-length 1
                              :max-length 1}
                       'map {:min-length 1
                             :max-length 1}}
            :map {:keys {:a 1}}}

           {:pred-map {'map {:min-length ?length
                             :max-length ?length
                             :as ?stats}}
            :map {:keys (m/app count ?length)
                  :as ?entries}}
           {:entity {:stats ?stats
                     :entries (m/app :keys ?entries)}})
produces
{:entity {:stats {:min-length 1, :max-length 1}, :entries {:a 1}}}
Changing :as ?entries to :as {:keys ?entries} and changing (m/app :keys ?entries) to ?entries doesn't match.
{:pred-map {'map {:min-length ?length
                             :max-length ?length
                             :as ?stats}}
            :map {:keys (m/app count ?length)
                  :as {:keys ?entries}}}
           {:entity {:stats ?stats
                     :entries ?entries}}
;; nil
This gives nil.
:as (m/app :keys ?entries)
{:entity {:stats {:min-length 1, :max-length 1}, :entries nil}}