    binding optional-path-with-default-binding-clause-binding])
 
 (defn optional-path-with-default-binding-clause
+  "Returns an optional clause that matches a `path`, binding the
+  match to a symbol based on `path` or the `default-value`."
   [path default-value bind]
   {:pre [(path? path)]}
   (make-optional-path-with-default-binding-clause path default-value bind))

   matcher path-matches-without-binding-clause-matcher])

(defn path-matches-without-binding-clause
  [path matcher]
  {:pre [(and (path? path) (matcher? matcher))]}
  (make-path-matches-without-binding-clause path matcher))

  [clauses pattern-clauses])

(defn pattern
  "Takes some `clauses` and returns a [[Pattern]]."
  [& clauses]
  (make-pattern clauses))

;; We differentiate between different kinds of matchers:
;; 1. Constant: Match on exactly one value. The value must be equatable.
;; 2. Regex: Match on a regex. The value must be a String.
;; 3. Existence: Match on the existence. That is, not nil.
