         [clojure.pprint :only (pprint cl-format)])
   (:refer-clojure :exclude [replace]))
 
-(defn ^:private build-doc [{:keys [switches docs default]}]
+(defn- build-doc [{:keys [switches docs default]}]
   [(apply str (interpose ", " switches))
    (or (str default) "")
    (or docs "")])
 
-(defn ^:private banner-for [specs]
+(defn- banner-for [specs]
   (println "Usage:")
   (println)
   (let [docs (into (map build-doc specs)

         :default                        [s]))
      flatten))

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

                     (contains? switches arg))))
       first))

(defn- default-values-for
  [specs]
  (into {} (for [s specs] [(s :name) (s :default)])))

(defn- apply-specs
  [specs args]
  (loop [options    (default-values-for specs)
         extra-args []
