                      (contains? switches arg))))
        first))
 
-(defn default-values-for
+(defn ^:private default-values-for
   [specs]
   (into {} (for [s specs] [(s :name) (s :default)])))
 
-(defn apply-specs
+(defn ^:private apply-specs
   [specs args]
   (loop [options    (default-values-for specs)
          extra-args []

         :default                        [s]))
      flatten))

(defn generate-spec
  [raw-spec]
  (let [[switches raw-spec] (split-with #(and (string? %) (opt? %)) raw-spec)
        [docs raw-spec]     (split-with string? raw-spec)

        [clojure.pprint :only (pprint cl-format)])
  (:refer-clojure :exclude [replace]))

(defn ^:private build-doc [{:keys [switches docs default]}]
  [(apply str (interpose ", " switches))
   (or (str default) "")
   (or docs "")])

(defn ^:private banner-for [specs]
  (println "Usage:")
  (println)
  (let [docs (into (map build-doc specs)
