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