 
 (defn- whitespace?
   "Checks whether a given character is whitespace"
-  [^Character ch]
+  [ch]
   (if ch
-    (or (Character/isWhitespace ch) (= \, ch))))
+    (or (Character/isWhitespace ^char ch) (identical? \, ch))))
 
 (defn- numeric?
   "Checks whether a given character is numeric"
-  [^Character ch]
+  [ch]
   (if ch
-    (Character/isDigit ch)))
+    (Character/isDigit ^char ch)))
 
 (defn- comment-prefix?
   "Checks whether the character begins a comment."
   [ch]
-  (= \; ^char ch))
+  (identical? \; ^char ch))
 
 (defn- number-literal?
   "Checks whether the reader is at the start of a number literal"
-  [reader ^Character initch]
+  [reader initch]
   (or (numeric? initch)
-      (and (or (= \+ initch) (= \- initch))
+      (and (or (identical? \+ ^char initch) (identical? \- ^char initch))
            (numeric? (peek-char reader)))))
 
 (declare read macros dispatch-macros)


(defn read-list
  [rdr _]
  (let [[line column] (if (satisfies? IndexingReader rdr)
                        [(get-line-number rdr) (dec (get-column-number rdr))])
        the-list (read-delimited-list \) rdr true)]
    (if (empty? the-list)

        (throw e)
        (throw (ex-info (.getCause e)
                        (merge {:type :reader-exception}
                               (if (instance? IndexingPushbackReader (class reader))
                                 {:line (get-line-number reader)
                                  :column (get-column-number reader)}))
                        e))))))
