   "Creates a StringPushbackReader from a given string"
   (StringPushbackReader. (atom s)))
 
+;; Helper functions
+
 (defn- whitespace?
-  "Checks whether the reader is on a whitespace character."
-  [reader]
-  (let [ch (peek reader)]
-    (or (gstring/isBreakingWhitespace ch) (= \, ch))))
+  "Checks whether a given character is whitespace"
+  [ch]
+  (or (gstring/isBreakingWhitespace ch) (= \, ch)))
+
+(defn- numeric?
+  "Checks whether a given character is numeric"
+  [ch]
+  (gstring/isNumeric ch))
 
 (defn- comment?
   "Checks whether the reader is at the beginning of a comment"

  [reader]
  (if (not (nil? (peek reader)))
    (cond
     (whitespace? reader) (do (read-char reader) (recur reader))
     (comment? reader) (recur (skip-line reader))
     (number-literal? reader) (read-number reader)
     (string-literal? reader) (read-string reader)

  "Checks whether the reader is at the first digit of a number"
  [reader]
  (let [ch (peek reader)]
    (or (numeric? ch)
        (and (or (= \+ ch) (= \- ch))
             (numeric? (peek reader 2))))))

(defn- string-literal?
  "Checks whether the reader is at the first character of a string literal"
