 (defn prioritize [pred coll]
   (apply concat (separate pred coll)))
 
+;; TODO: Remove
 (defn remove-val [v aseq]
   (filter (partial not= v)
           aseq))
-
-(defn third [aseq]
-  (nth aseq 2))
-
-(defn parallel-exec [funcs]
-  (if (empty? funcs)
-    []
-    (let [[thisfn & restfns] funcs
-          future-rest (dofor [f restfns] (future-call f))]
-      (cons (thisfn) (map deref future-rest)))))
 
 (defn mk-rw-lock []
   (ReentrantReadWriteLock.))

  (= s2 (first (sort [s1 s2]))))

(defmacro safe-assert
  ([x] `(safe-assert ~x ""))
  ([x msg]
     (if (>=s (clojure-version) "1.3.0")
       `(assert ~x ~msg)
       `(assert ~x))))

(defn sleep [len]
  (when (pos? len)
    (Thread/sleep len)))


  (-> (Runtime/getRuntime)
      (.addShutdownHook (Thread. shutdown-func))))

(defn repeat-seq
  [amt aseq]
  (apply concat (repeat amt aseq)))

;; TODO: Remove.
(defn flattened-count [xs]
  (reduce + (map count xs)))

(defmacro dofor [bindings & body]
  `(doall (for ~bindings (do ~@body))))

(defmacro p-dofor [bindings & body]
  `(let [futures# (dofor ~bindings
