 
   The returned sequence will have attached metadata giving the bytes which
   comprise the first value in the sequence."
-  ([input]
+  ([^InputStream input]
    (read-data nil input))
-  ([tag-readers input]
+  ([tag-readers
+    ^InputStream input]
    ; TODO: ensure `mark` is supported
    (if (read-header! input)
      (let [reader (InputStreamReader. input blob-charset)

    [puget.data]
    [puget.printer :as puget])
  (:import
    java.io.ByteArrayOutputStream
    java.io.FilterReader
    java.io.InputStreamReader
    java.io.OutputStreamWriter
    java.io.PushbackReader
    java.nio.charset.Charset))


;; CONSTANTS & CONFIGURATION

(def blob-charset
  (Charset/forName "UTF-8"))



  data blob. The result is true if the header matches, and the stream is left
  positioned after the header bytes. Otherwise, it is reset back to the start of
  the stream."
  [^InputStream input]
  (let [magic-bytes (.getBytes blob-header blob-charset)
        magic-len (count magic-bytes)
        header-bytes (byte-array magic-len)]
