   (str value))
 
 (defn define-integer [name default help & args]
+  "Registers a flag whose value must be an integer."
   (apply define integer-parser name default (or help "an integer value")
          :serializer integer-serializer
          args))

(defn float-serializer [value]
  (str value))

(defn define-float [name default help & args]
  (apply define float-parser name default (or help "a float value")
         :serializer float-serializer
         args))

      (conj values new-value))))


(defn define-multi-string
  "Registers a flag whose value can be a list of any strings.

  Use the flag on the command line multiple times to place multiple
  string values into the list.  The 'default' may be a single string
  (which will be converted into a single-element vector) or a vector of
  strings."
  [name default help & args]
  (apply define (make-multi-parser string-parser)
         name default help
         :serializer string-serializer
         args))


(defn define-multi-integer
  "Registers a flag whose value can be a list of arbitrary integers.

  Use the flag on the command line multiple times to place multiple
  integer values into the list.  The 'default' may be a single integer
  (which will be converted into a single-element vector) or a vector of
  integers."
 [name default help & args]
  (apply define (make-multi-parser integer-parser)
         name default help
         :serializer integer-serializer
         args))


(defn define-multi-float
  "Registers a flag whose value can be a list of arbitrary floats.

  Use the flag on the command line multiple times to place multiple
  float values into the list.  The 'default' may be a single float
  (which will be converted into a single-element vector) or a vector
  of floats."
  [name default help & args]
  (apply define
         (make-multi-parser float-parser)
         name default help
