       m))
 
 (defn natural-map [ys] (zipmap (-> ys count range) ys))
-(defn natural-seq [f]
-    (if-let [y (f 0)]
-          (cons y (natural-seq (comp f inc)))
-          '()))
-
 (defn connect [f1 f2] #(if-let [y2 (f2 %)] (f1 y2) nil))
 
 (defn sum-n [series n] (reduce + (take n series)))

   (-> line melody lower-melody)))

(defn melody# [melody] 
  (let [notes (update-all melody [:pitch :time] natural-seq)
        play-at #(at %1 (piano# %2))]
    (dorun (map play-at (:time notes) (:pitch notes)))))

(def mirror (update :pitch #(connect - %))) 
(defn after [beats] (update :time #(shift % beats)))


(defn melody [notes]
  (let [functionalise #(update-all % [:time :pitch] natural-map)
        accumulate-time (update :time sums)
        add-count #(assoc % :count (count (:pitch notes)))]
    (-> notes accumulate-time functionalise add-count)))

(def leader 
  (let [call
