   (-equiv [o other] (identical? o other))
 
   goog.global.Date ; treat dates as values
-  (-equiv [o other] (identical? (.toString o ()) (.toString other ()))))
+  (-equiv [o other] (identical? (str o) (str other))))
 
 (defn = [x y]
   (-equiv x y))

(defn pr-str
  "pr to a string, returning it. Fundamental entrypoint to IPrintable."
  [obj]
  (pr-str-with-opts obj {"readably" true}))

(defn pr
  "Prints the object(s) using string-print.  Prints the

          [end]))

(extend-protocol IPrintable
  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)))

