Skip to content

Instantly share code, notes, and snippets.

@gtrak
Created March 8, 2017 00:30
Show Gist options
  • Save gtrak/9564d708b48b8ee4092b65ee3274c0fd to your computer and use it in GitHub Desktop.
Save gtrak/9564d708b48b8ee4092b65ee3274c0fd to your computer and use it in GitHub Desktop.
derefmap
;; I need this often enough, a lightweight introspectable fn+data
;; container with a default operation - GT
(defrecord _DerefMap [deref-fn]
clojure.lang.IDeref
(deref [me] (deref-fn me)))
(prefer-method print-method clojure.lang.IRecord clojure.lang.IDeref)
(prefer-method clojure.pprint/simple-dispatch clojure.lang.IRecord clojure.lang.IDeref)
(prefer-method clojure.pprint/simple-dispatch clojure.lang.IPersistentMap clojure.lang.IDeref)
(defn ->DerefMap
([deref-fn] (->DerefMap deref-fn nil))
([deref-fn atts]
(map->_DerefMap (merge {:deref-fn deref-fn}
atts))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment