 
 (defn pawn-non-capturing-moves[position [x y :as location] ]
   (assert (is-pawn? (piece-at-location position location)))
+  (when debug (println position location))
   (let [piece (piece-at-location position location)
         op (if (white-piece? piece)
              +

  (let [lines (vec (reverse (clojure.string/split-lines string)))
        ]
    (update-position
    { :type :position
     :player-to-move color
     :piece-locations
     (into (sorted-map) 
           (remove 
             (fn [x]
               (or (nil? (second x))
                   (= "" (second x))
                   (= " " (second x ))))
             (for [x (range 8) y (range 8)
                   :let [ location [x y]
                         piece (str (get (get lines y) x)) 
                         ]
                   ]
               [location piece]  ;; map entry
               )))
     })))

(def starting-position
  "Horizontal rows are ranks. Vertical rows are files"

  (let [
        op (if (= :white (:player-to-move position)) inc dec) 
        ]
    "return valid capture locations for the pawn at given location"
    (keep 
      (fn[dec-or-inc]
        (if (unoccupied? position [(dec-or-inc x) (op y)])
