 
 %s"
      (header-label "Syntax error")
-     (case (:reason problem)
-       "Insufficient input" (insufficient-input spec-name val path problem)
-       "Extra input" (extra-input spec-name val path)))))
+     (insufficient-input spec-name val path problem))))
+
+(defmethod problem-group-str :problem/extra-input [_type spec-name val path problems opts]
+  (s/assert ::singleton problems)
+  (let [problem (first problems)]
+    (printer/format
+     "%s
+
+%s"
+     (header-label "Syntax error")
+     (extra-input spec-name val path))))
+
 
 (defmethod problem-group-str :problem/fspec-exception-failure [_type spec-name val path problems opts]
   (s/assert ::singleton problems)

          :spec/contains-key-pred
          (nth pred 2)))))

(defn regex-failure? [_problem problem]
  (contains? #{"Insufficient input" "Extra input"} (:reason problem)))

(defn multi-spec [pred spec]
  (->> (s/form spec)

    (missing-spec? failure problem)
    :problem/missing-spec

    ;; TODO - move to top of list
    (insufficient-input? failure problem)
    :problem/insufficient-input

    (extra-input? failure problem)
    :problem/extra-input

    (fspec-exception-failure? failure problem)
    :problem/fspec-exception-failure
