munge translates valid Clojure function and namespace names into names valid for Java classes and packages. Clojure permits characters such as question marks and dashes that require translation at the Java boundary; for example, namespace dashes become underscores in relative file names. section 22.3
Generated names and readable stack traces
A function named my-namespace/my-funct! can appear internally as my_namespace$my_funct_BANG_. demunge reverses that representation for display, producing my-namespace/my-funct!, while stack-element-str formats the complete stack-trace element. section 22.3
(ns my-namespace) ; #1
(require '[clojure.repl :refer [demunge stack-element-str]]) ; #2
(defn my-funct! [] (throw (ex-info "error" {})))
(str my-funct!) ; #3
;; "my_namespace$my_funct_BANG_@621ada4f"
(demunge (str my-funct!)) ; #4
;; "my-namespace/my-funct!@4e212104"
(def stack-trace (try (my-funct!) (catch Exception e (.getStackTrace e)))) ; #5
(nth stack-trace 2) ; #6
;; [my_namespace$my_funct_BANG_ invokeStatic "form-init4179141376169992155.clj" 1]
(stack-element-str (nth stack-trace 2)) ; #7
;; "my-namespace/my-funct! (form-init4179141376169992155.clj:1)"
Inspect the complete transformation from a Clojure function name to its generated Java-oriented name and back to a readable stack-trace form. section 22.3
