           [end]))
 
 (extend-protocol IPrintable
-  goog.global.Number (-pr-seq [n opts] (list (.toString n 10)))
-  goog.global.String (-pr-seq [str opts]
-                        (if (get opts "readably")
-                          (list (goog.string.quote str))
-                          (list str)))
-  goog.global.Boolean (-pr-seq [bool opts] (list (.toString bool ())))
+  goog.global.Boolean (-pr-seq [bool opts] (list (str bool)))
+  goog.global.Number (-pr-seq [n opts] (list (str n)))
+  goog.global.String (-pr-seq [obj opts]
+                        (cond
+                          (keyword? obj)
+                            (list (str ":"
+                                       (when-let [nspc (namespace obj)]
+                                         (str nspc "/"))
+                                       (name obj)))
+                          (symbol? obj)
+                            (list (str (when-let [nspc (namespace obj)]
+                                         (str nspc "/"))
+                                       (name obj)))
+                          (get opts :readably)
+                            (list (goog.string.quote obj))
+                          :else (list obj)))
   goog.global.Array (-pr-seq [a opts]
                       (pr-sequential pr-seq "#<Array [" ", " "]>" opts a)))
 

      (when coll
        (.append sb (first coll))
        (recur (next coll))))
    (.toString sb ())))

(defn pr-with-opts
  "Prints a single object using string-print, observing all

  (-equiv [o other] (identical? o other))

  goog.global.Date ; treat dates as values
  (-equiv [o other] (identical? (str o) (str other))))

(defn = [x y]
  (-equiv x y))
