    (instance? String s) (java.io.StringReader. s)
    :else (throw (Exception. (format "can't turn %s into a Reader" s)))))
 
-(defn- %positioned-stream [reader δposition encoder line-offset column-offset]
+(defn- %positioned-stream [reader delta-position encoder line-offset column-offset]
   (lazy-seq
    (if-let [char (read-char reader)]
-     (cons [char (+ line-offset (:line δposition)) (+ column-offset (:column δposition))]
+     (cons [char (+ line-offset (:line delta-position)) (+ column-offset (:column delta-position))]
            (%positioned-stream
-            reader (inc-δposition δposition char encoder) encoder line-offset column-offset)))))
+            reader (inc-delta-position delta-position char encoder) encoder line-offset column-offset)))))
 
 (defn positioned-stream
   ([input]

;; (inheriting this behavior or lack thereof from java.io.LineNumberingReader).
;; If you care about tab width, use this delta-position library instead.
;;
;; A δposition is a map representing how a given string affects the position.
;; Importantly, combining two δposition is associative
;; — it's not merely a position that you have to compute from the beginning
;; of the file, but a delta that you can compute between arbitrary points.
;;
;; Thus, if you want fast random access to the line and column
;; information from a random byte or character position in your file,
;; you can divide your file in chunks of strings,
;; compute δposition for each chunk in parallel,
;; and build a tree index that makes it easy to
;; compute the position of a random character or byte.
;; Of course, if you're using a variable length encoding,

  ([input options]
     (%positioned-stream
      (ensure-reader input)
      (or (:delta-position options) null-delta-position)
      (or (:encoder options) utf8-encoder)
      (or (:line-offset options) 0)
      (or (:column-offset options) 0))))
