Я думаю, что вы пытаетесь подражать объектам в Clojure. У объектов есть данные и функции, работающие с этими данными, упакованными вместе в классе, но в функциональных языках, таких как Clojure, данные и функции разделены.
Таким образом, идиоматический способ в Clojure - это функциональный подход, то есть просто функции, работающие с неизменяемыми данными. Единственная функция OO в Clojure - это протоколы, которые используются для полиморфизма.
Я думаю, что вы хотите в своем примере это:
(def example
{:a {:b 2 :data [1 2 3]}})
(defn something-that-uses-data [{{:keys [data] :a}}]
(do-work-with data))
Конечно, вы можете иметь карту, которая содержит данные и функции, но она будет полезна, только если функции разные и Вы хотите применить эти функции в последовательном контексте. Примерно так ... но я только догадываюсь, какой у тебя может быть контекст.
(map (fn [[k v]
(let [data (:data v)
f (:somthing-that-uses-data v)]
(f data)))
collection-of-maps)