     (key-matches-with-binding-clause? clause)
     (conj bindings (key-matches-with-binding-clause->rhs-match message clause))
 
-    (optional-key-matches-without-binding-clause? clause)
+    (optional-key-without-binding-clause? clause)
     (conj bindings `[])
 
     (optional-key-with-default-binding-clause? clause)

        `(~(fold-path path '_) :guard ~(match-value message path))
        (fold-path path (match-value message path))))

    (optional-path-matches-without-binding-clause? clause)
    {}

    (optional-path-with-default-binding-clause? clause)
    {}))


(defn reduce-lhs
  [lhss]

        ~rhs)]))

(defmacro parse-pattern
  "Parse the argument to `defpattern` as a [[Pattern]]."
  [pattern]
  (if (vector? pattern)
    `(make-pattern (parse-clauses ~pattern))
    pattern))

;; Match
