 
    (ansi/color (printer/indent (pr-str (:expound/check-fn-call (first problems)))) :bad-value)
 
-   (*value-str-fn* spec-name val path (paths/value-in val path))
-   (expected-str _type spec-name val path problems opts)))
-
-(defmethod expected-str :expound.problem/unknown [_type spec-name val path problems opts]
+   (*value-str-fn* spec-name form path (paths/value-in form path))
+   (expected-str _type spec-name form path problems opts)))
+
+(defmethod expected-str :expound.problem/unknown [_type spec-name form path problems opts]
   (predicate-errors problems))
 
-(defmethod problem-group-str :expound.problem/unknown [type spec-name val path problems opts]
+(defmethod problem-group-str :expound.problem/unknown [type spec-name form path problems opts]
   (assert (apply = (map :val problems)) (str util/assert-message ": All values should be the same, but they are " problems))
   (format-err
    "Spec failed"
    type
    spec-name
-   val
+   form
    path
    problems
    opts
-   (expected-str type spec-name val path problems opts)))
+   (expected-str type spec-name form path problems opts)))
 
 (defn ^:private instrumentation-info [failure caller]
   ;; As of version 1.9.562, Clojurescript does

   (value-str type spec-name form in problems opts)
   expected))

(defmethod expected-str :expound.problem-group/one-value [_type spec-name val path problems opts]
  (let [problem (first problems)
        subproblems (:problems problem)
        grouped-subproblems (vals (group-by :expound.spec.problem/type subproblems))]

                      (string/join ", "))
                 :good))))

(defmethod problem-group-str :expound.problem/not-in-set [type spec-name form path problems opts]
  (assert (apply = (map :val problems)) (str util/assert-message ": All values should be the same, but they are " problems))
  (format-err "Spec failed"
              type
              spec-name
              form
              path
              problems
              opts
              (expected-str type spec-name form path problems opts)))

(defmethod expected-str :expound.problem/missing-spec [_type spec-name form path problems opts]
  (str "with\n\n"
       (->> problems
            (map #(no-method spec-name form path %))
            (string/join "\n\nor with\n\n"))))

(defmethod value-str :expound.problem/missing-spec [_type spec-name form path problems opts]
  (printer/format
   "Cannot find spec for

%s"
   (show-spec-name spec-name (*value-str-fn* spec-name form path (paths/value-in form path)))))

(defmethod problem-group-str :expound.problem/missing-spec [type spec-name form path problems opts]
  (printer/format
   "%s\n\n%s\n\n%s"
   (header-label "Missing spec")
   (value-str type spec-name form path problems opts)
   (expected-str type spec-name form path problems opts)))

(defn ^:private lcs* [[x & xs] [y & ys]]
  (cond
