   the given reader. The seq continues until the end of the reader is reached.
 
   If non-laziness is needed, see parse-stream."
-  [^BufferedReader reader & [keywords?]]
+  [^BufferedReader reader & [^Boolean keywords?]]
   (parsed-seq* (.createJsonParser factory reader) (or keywords? false)))
 
 (defn parsed-smile-seq
   "Returns a lazy seq of Clojure objects corresponding to the SMILE read from
   the given reader. The seq continues until the end of the reader is reached."
-  [^BufferedReader reader & [keywords?]]
+  [^BufferedReader reader & [^Boolean keywords?]]
   (parsed-seq* (.createJsonParser smile-factory reader) (or keywords? false)))
 
 ;; aliases for clojure-json users

;; Lazy parsers
(defn- parsed-seq*
  "Internal lazy-seq parser"
  [^JsonParser parser keywords?]
  (let [eof (Object.)]
    (lazy-seq
     (let [elem (parse parser true keywords? eof)]

  "Returns the Clojure object corresponding to the given JSON-encoded string.
  keywords? should be true if keyword keys are needed, the default is false
  maps will use strings as keywords."
  [^String string & [^Boolean keywords?]]
  (parse
   (.createJsonParser factory (StringReader. string))
   true (or keywords? false) nil))
