     ([k v] (= k (:error-key error-data)))
     ([x] (= x (:error-value error-data)))))
 
+(defn print-multi-line-error [[msg & more :as all] left]
+  (when (seq all)
+    (println (a/magenta (str (pad (+ left)) "^-- " msg)))
+    (doseq [m more]
+      (println (a/magenta (str (pad (+ left)) "    " m))))))
+
 (defn display-err-map-or-val
   ([msgs] (display-err-map-or-val msgs 0))
-  ([[msg & more :as all] extra]
+  ([all extra]
    (fn
      ([left k v]
       (println (str (pad left) (a/bold-red (str (pr-str k) " " (pr-str v)))))
-      (when (seq all)
-        (println (a/magenta (str (pad (+ left extra)) "^-- " msg)))
-        (doseq [m more]
-          (println (a/magenta (str (pad (+ left extra)) "    " m))))))
+      (print-multi-line-error all left))
      ([left x]
       (println (str (pad left) (a/bold-red (str (pr-str x)))))
-      (when (seq all)
-        (println (a/magenta (str (pad (+ left extra)) "^-- " msg)))
-        (doseq [m more]
-          (println (a/magenta (str (pad (+ left extra)) "    " m)))))))))
+      (print-multi-line-error all left)))))
 
 (defn matches-faulty-key? [k v elements faulty-key]
   (some #{k v} #{faulty-key}))

        (fn [k v]
          (println "  " (a/bold-red (str (pr-str k) " " (pr-str v))))
          (when (= k faulty-key)
            (println (a/magenta (str "    ^-- " (semantic-error-msgs (:semantic-error error-data)))))))]
    (show-header structure-type faulty-key)
    (show-map context faulty-key match-f error-f)
    (show-docs entry faulty-key)

        pred (first (:predicates error-data))
        faulty-key (relevant-key pred)]
    (cond (and (map? context) (context faulty-key))
          (map-conditional-failed* job error-data structure-type faulty-key pred)

          (map? context)
          (missing-required-key* job
