     (+ col0 col1)))
 
 (defn &indent [column]
-  (fn [[in [top :as is] out :as σ]]
+  (fn [[in out [top :as is] ds :as σ]]
     (let [pos (in-position in)
           info [*file* pos pos]
           tok+ #(conj % [%2 nil info])]
       (if (> column top)
-        [nil [in (conj is column) (tok+ out :indent)]]
+        [nil [in (tok+ out :indent) (conj is column) ds]]
         (loop [[top & ris :as is] is
                out out]
           (cond
-           (= column top) [nil [in is out]]
+           (= column top) [nil [in out is ds]]
            (or (empty? ris) (> column top)) ((&error {:r "invalid dedentation"}) σ)
            :else (recur ris (tok+ out :dedent))))))))
-
-(def &comment-eol
-  (&do (&optional (&do (&char= \#) (&repeat (&char-if-not crlf)))) &eol))
 
 (defn char-range [first last]
   (map char (range (int first) (inc (int last)))))

  ([]
     (&error {}))
  ([details]
     (fn [[in _ _]]
       (let [[l c] (in-position in)]
         (fail (conj details [:file *file*] [:line l] [:column c]))))))
(def &fail (&error))

  (first (&python (init-state input))))

(comment
  (defn test-lex* [input]
    (try (python-lexer input) (catch clojure.lang.ExceptionInfo x (.data x))))

  (defn test-lex [input]
    (map (fn [[a b _]] [a b]) (test-lex* input)))

  (test-lex* "
def hello (world, *more)
  print()
  \"a b\" + 'c d' + \\
  foo['abcd',
bar, \"1 2 3\",
     # comment
  baz]
def quux ()
  {ur\"x\": \"a\"}")
  (try-python-lexer "def hello abcd\n  foo\n  baz\ndef quux\n  ur\"x\\\"\"")
);comment
