     [overtone util]
     [overtone.sc.ugen special-ops common categories]
     [clojure.contrib.types :only (deftype)]
-    [clojure.contrib.generic :only (root-type)]
-    [clojure.contrib.seq-utils :only (indexed)]) ; TODO use keep-indexed or map-indexed
+    [clojure.contrib.generic :only (root-type)])
   (:require
     overtone.sc.core
     [clojure.set :as set]

(defn- with-floated-args [spec ugen]
  (assoc ugen :args (floatify (:args ugen))))

; TODO: Refactor these init functions so everything just takes a ugen and a spec
   ; and outputs an updated ugen...  Should have done it like this initially...
(defn- with-init-fn
  "Creates the final argument initialization function which is applied to arguments
  at runtime to do things like re-ordering and automatic filling in of arguments.

    (println (apply str (interpose " -> " cat)))))

(def UGEN-RATE-SORT-FN
  (zipmap UGEN-RATE-PRECEDENCE (range (count UGEN-RATE-PRECEDENCE)))

(defn- print-ugen-rates [rates]
  (let [rates (sort-by UGEN-RATE-SORT-FN rates)]
