Если вы хотите открыть методы, просто используйте простое отражение Java:
user=> (.getDeclaredMethods (.getClass {:a 1}))
#<Method[] [Ljava.lang.reflect.Method;@72b398da>
user=> (pprint *1)
[#<Method private int clojure.lang.PersistentArrayMap.indexOf(java.lang.Object)>,
#<Method public int clojure.lang.PersistentArrayMap.count()>,
#<Method public java.util.Iterator clojure.lang.PersistentArrayMap.iterator()>,
#<Method public boolean clojure.lang.PersistentArrayMap.containsKey(java.lang.Object)>,
#<Method public int clojure.lang.PersistentArrayMap.capacity()>,
#<Method public clojure.lang.IPersistentMap clojure.lang.PersistentArrayMap.empty()>,
...
Вы также можете написать его немного лучше с помощью макроса потоков:
(-> {:a 1} .getClass .getDeclaredMethods pprint)
или
(-> clojure.lang.PersistentArrayMap .getDeclaredMethods pprint)
(я только что узнал из #clojure IRC, что имя самого класса уже является объектом Class!)