         :path-matches-with-binding ::path-matches-with-binding
         :optional-key-exists-with-binding ::optional-key-exists-with-binding
         :optional-path-exists-with-binding ::optional-path-exists-with-binding
-        :optional-key-matches-with-binding ::optional-key-matches-with-binding))
+        :optional-key-matches-with-binding ::optional-key-matches-with-binding
+        :optional-path-matches-with-binding ::optional-path-matches-with-binding))
 
 (defn match-value->matcher
   [[kind match-value]]

  (s/or :required (s/cat :path ::path :match-value ::match-value)))

(s/def ::path-matches-with-binding
  (s/or :required (s/cat :path ::path :match-value ::match-value :binding-key ::binding-key :binding ::binding)
        :optional (s/cat :qmark ::qmark :path ::path :default-value ::default-value :binding-key ::binding-key :binding ::binding)))

(s/def ::clause
  (s/or :key-exists-without-binding ::key-exists-without-binding

          :path-matches-with-binding
          (let [path (mapv make-key (:path body))
                b    (make-binding (:binding body))]
            `(path-matches-with-binding-clause ~path (match-value->matcher ~(:match-value body)) ~b))

          :optional-path-matches-with-binding
          (let [path (mapv make-key (:path body))
                b    (make-binding (:binding body))]
              `(optional-path-with-default-binding-clause ~path ~(:default-value body) ~b)))))))

(defmacro parse-clauses
  [cs]
