         (value-str* spec-name [problem] opts)
         (expected-str* spec-name [problem] opts))))))
 
-(defmethod problem-group-str :expound.problem-group/many-values [_type spec-name val path problems opts]
+(defmethod problem-group-str :expound.problem-group/many-values [_type spec-name form path problems opts]
   (s/assert ::singleton problems)
   (printer/format
    "%s\n\n%s"
    (header-label "Spec failed")
-   (expected-str _type spec-name val path problems opts)))
-
-(defmethod expected-str :expound.problem/missing-key [_type spec-name val path problems opts]
+   (expected-str _type spec-name form path problems opts)))
+
+(defmethod expected-str :expound.problem/missing-key [_type spec-name _form path problems opts]
   (explain-missing-keys problems))
 
-(defmethod problem-group-str :expound.problem/missing-key [type spec-name val path problems opts]
+(defmethod problem-group-str :expound.problem/missing-key [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)))
-
-(defmethod expected-str :expound.problem/not-in-set [_type _spec-name _val _path problems _opts]
+              (expected-str type spec-name form path problems opts)))
+
+(defmethod expected-str :expound.problem/not-in-set [_type _spec-name _form _path problems _opts]
   (let [combined-set (apply set/union (map :pred problems))]
     (printer/format
      "should be%s: %s"

   (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))]

     (printer/indent (ansi/color (pr-str (:val problem)) :bad-value))
     (printer/indent (ansi/color (pr-pred (:pred problem) (:spec problem)) :good-pred)))))

(defmethod problem-group-str :expound.problem/check-fn-failure [_type spec-name form path problems opts]
  (s/assert ::singleton problems)
  (printer/format
   format-str
   (header-label "Function spec failed")
   (ansi/color (printer/indent (pr-str (:expound/check-fn-call (first problems)))) :bad-value)
   (expected-str _type spec-name form path problems opts)))

(defmethod expected-str :expound.problem/check-ret-failure [_type spec-name form path problems opts]
  (predicate-errors problems))

(defmethod problem-group-str :expound.problem/check-ret-failure [_type spec-name form path problems opts]
  (printer/format
   "%s

