     (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 #(or (= 4 (count %1))
-                                    (= 6 (count %1))) (filter seq? ?field-specs)))
-    (throw (IllegalArgumentException. (str "wrong number of elements in field specs with lens 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)

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


(defn specs-vec
  [spec &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))]
