               (pr-writer (meta obj) writer opts)
               (-write writer " "))
             (cond
+              (nil? obj) (-write writer "nil")
+
               ;; handle CLJS ctors
-              (and (not (nil? obj))
-                   ^boolean (.-cljs$lang$type obj))
-                (.cljs$lang$ctorPrWriter obj obj writer opts)
-
+              ^boolean (.-cljs$lang$type obj)
+              (.cljs$lang$ctorPrWriter obj obj writer opts)
+              
               ; Use the new, more efficient, IPrintWithWriter interface when possible.
-              (satisfies? IPrintWithWriter obj) (-pr-writer obj writer opts)
+              (satisfies? IPrintWithWriter obj)
+              (-pr-writer obj writer opts)
+              
+              (or (identical? (type obj) js/Boolean) (number? obj))
+              (-write writer (str obj))
+
+              (identical? (type obj) js/Array)
+              (pr-sequential-writer writer pr-writer "#<Array [" ", " "]>" opts obj)
+
+              ^boolean (goog/isString obj)
+              (cond
+                (keyword? obj)
+                (do
+                  (-write writer ":")
+                  (when-let [nspc (namespace obj)]
+                    (write-all writer (str nspc) "/"))
+                  (-write writer (name obj)))
+                (symbol? obj)
+                (do
+                  (when-let [nspc (namespace obj)]
+                    (write-all writer (str nspc) "/"))
+                  (-write writer (name obj)))
+                :else (if (:readably opts)
+                        (-write writer (quote-string obj))
+                        (-write writer obj)))
+
+              (fn? obj)
+              (write-all writer "#<" (str obj) ">")
+
+              (instance? js/Date obj)
+              (let [normalize (fn [n len]
+                                (loop [ns (str n)]
+                                  (if (< (count ns) len)
+                                    (recur (str "0" ns))
+                                    ns)))]
+                (write-all writer
+                  "#inst \""
+                  (str (.getUTCFullYear obj))             "-"
+                  (normalize (inc (.getUTCMonth obj)) 2)  "-"
+                  (normalize (.getUTCDate obj) 2)         "T"
+                  (normalize (.getUTCHours obj) 2)        ":"
+                  (normalize (.getUTCMinutes obj) 2)      ":"
+                  (normalize (.getUTCSeconds obj) 2)      "."
+                  (normalize (.getUTCMilliseconds obj) 3) "-"
+                  "00:00\""))
 
               (regexp? obj) (write-all writer "#\"" (.-source obj) "\"")
 

(defn flush [] ;stub
  nil)

(deftype StringBufferWriter [sb]
  IWriter
  (-write [_ s] (.append sb s))


  ICollection
  (-conj [_ o] (list o))

  IIndexed
  (-nth
