 
 (def decorators [[:validate-base make-validate-base]
                  [:validate-has make-validate-has]
+                 [:valid-output? make-valid-output?]
+                 [:valid-input? make-valid-input?]
                  [:validate-value make-validate-value]
                  [:get-optional-unchecked make-get-optional-unchecked]
                  [:get-optional make-get-optional]

        (accessor-error "missing value"
                        accessor x nil)))))

(defn make-validate-value [accessor]
  (let [v? (:valid-value? accessor)]
    (fn [x]
      (if (v? x)
        x

(defn vector-methods [index]
  {:can-get? #(< index (count %))
   :get #(nth % index)
   :set (fn [obj x] (assoc obj index x))
   :can-remove? (constantly false)
   :remove identity})

(defn vector-accessor 
  ([index extra-opts] 
