          f)
        f)) form))
 
+;; The UnreadableForm record is used to wrap serializable representations of
+;; unserializable EDN/Clojure forms on the wire.
 (defrecord UnreadableForm [form-string form-class])
+
+(defn unreadable-form [val]
+  (->UnreadableForm (str val)  (str (.getName (class val)))))
 
 (defn- readable-form?
   "Returns false if the form can't be read, or returns the form (truthy) if it

   (let [form (:grafter.tabular/template (meta graphf))
         bindings (first (second form))
         body-forms (drop 2 form)
         printable-row-data (->printable-row (nth (:rows dataset) row nil))
         subs (substitution-map bindings printable-row-data)]

     {:bindings bindings :row printable-row-data :template

  "Tool support for rendering previews of grafter.tabular graph-fn templates
  with values from datasets."
  (:require [clojure.walk]
            [clojure.edn :as edn]
            [grafter.tabular :refer [make-dataset]])
  (:import [incanter.core Dataset]))

(defn- symbolize-keys [m]
  (zipmap (map (comp symbol name) (keys m)) (vals m)))
