 
 (defn specs-vec
   [spec &form]
-  (if-not (even? (count spec))
-    (IllegalArgumentException. (str "invalid field spec " spec " in " *ns* " " (meta &form)))
+  (if (even? (count spec))
+    (throw (IllegalArgumentException. (str "invalid field spec " spec " in " *ns* " " (meta &form))))
     (let [[field accessor & mods] spec
           mod-m (into {} (map vec (partition 2 mods)))]
       [field accessor (if-let [spec (:spec (meta field))]

  (loop [specs (seq specs)
         triples []]
    (if (empty? specs)
      (do
        (println triples)
        triples)
      (let [spec (first specs)]
        (cond
          (list? spec)

    (throw (IllegalArgumentException. (str "field specs must be a vector in " *ns* " " (meta &form)))))
  (when-not (even? (count (remove seq? ?field-specs)))
    (throw (IllegalArgumentException. (str "odd number of elements in field specs in " *ns* " " (meta &form)))))
  (when-not (every? true? (map #(= 3 (count %)) (filter seq? ?field-specs)))
    (do
      (println (every? true? (map #(= 3 (count %)) (filter seq? ?field-specs))))
      (throw (IllegalArgumentException. (str "wrong number of elements in field specs with lens in " *ns* " " (meta &form))))))

  (let [?field-triples (field-triples ?field-specs &form)
        ?constructor (first ?constructor-call)
