   ([reader eof-error? sentinel] (read reader eof-error? sentinel false))
   ([^blind.reader.IPushbackReader reader eof-error? sentinel recursive?]
      (try
-       (let [ch (char (read-char reader))]
+       (let [ch (read-char reader)]
          (cond
             (nil? ch) (if eof-error? (reader-error reader "EOF") sentinel)
             (whitespace? ch) (read reader eof-error? sentinel recursive?)

               (let [d (Character/digit ^char ch ^int base)]
                 (read-char rdr)
                 (if (== d -1)
                   (throw (IllegalArgumentException. (str "Invalid digit: " (char ch))))
                   (recur (inc i) (long (* uc (+ base d))))))))
           (char uc))))))


(defn- comment-prefix?
  "Checks whether the character begins a comment."
  [ch]
  (identical? \;  ch))

(defn- number-literal?
  "Checks whether the reader is at the start of a number literal"
  [reader initch]
  (or (numeric? initch)
      (and (or (identical? \+ initch) (identical?  \- initch))
           (numeric? (peek-char reader)))))

(defn newline? [c]
  "Checks whether the character is a newline"
  (or (identical? \newline c)
      (nil? c)))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; read helpers
