   (template "span" "color:#C41A16" (str dq value dq)))
 
 (defn fn-template [value]
-  (template "span" "color:#f00" (reference value) "fn"))
+  (template "span" "color:#f0f" (reference (surrogate value "λ"))))
 
 (defn header-inlined-templates [value renderer max]
   (let [rendered-items (apply concat (interpose [(spacer)] (map renderer (take max value))))]

        items (header-inlined-templates value renderer max-coll-elements)]
    (template "span" "color:#000" "[" items "]")))

(defn generic-template [value]
  (template "span" "color:#000" (reference value)))

(defn atomic-template [value]
  (cond
    (nil? value) (nil-template value)
    (string? value) (string-template value)
    (number? value) (number-template value)
    (keyword? value) (keyword-template value)

  (something-abbreviated? (js->clj template)))

(defn want-value? [value]
  (or (cljs-value? value)
      (surrogate? value)))

(defn header-hook [value]
  (if (surrogate? value)
    (.-header value)
    (build-header value)))

(defn has-body-hook [value]
  (if (surrogate? value)
    true
    (abbreviated? (build-header value))))

(defn build-surrogate-body [value]
  (let [target (.-target value)]
    (template "ol"
              "list-style-type:none; padding-left:0px; margin-top:0px; margin-bottom:0px; margin-left:12px"
              (template "li" "margin-left:12px" (reference target (pr-str target))))))

(defn body-hook [value]
  (if (surrogate? value)
    (build-surrogate-body value)
    (build-body value)))

(defn sanitize
  "wraps our hook in try-catch block to prevent leaking of exceptions if something goes wrong"
