     (when-let [pred-func (last (first (schema-rules [:= pred-id])))]
       [pred-func kt])))
 
-;; this is what implements or
+;; TODO this is what implements or
 (defn type-check-key-value [parent-type ky value state]
   (let [next-types (get-types-from-key-parent parent-type (fix-key ky (:parent-value state)))
         state      (update-in state [:path] conj ky)]

(defn assert-not-empty [root & key-list]
  (mapv (fn [k] [root :not-empty k]) key-list))

(defn doc
  ([root type-doc kd]
   (cons [root :doc-type type-doc]

           error)])
      {:success-type typ})))

;; TODO or relationship
(defn type-check-value [parent-type value state]
  (if-let [preds (all-predicates parent-type)]
    (let [errors   (map #(type-check-pred % value state) preds)
