anchor.diff:  [source,clojure]
   ----
   (s/fdef ranged-rand
  -  :args (s/and (s/cat :start integer? :end integer?)
  +  :args (s/and (s/cat :start int? :end int?)
                  #(< (:start %) (:end %)))
  -  :ret integer?
  +  :ret int?
     :fn (s/and #(>= (:ret %) (-> % :args :start))
                #(< (:ret %) (-> % :args :end))))
   ----
  
positive.code: ;; val: 5 fails spec: ::big-even predicate: even?
  (s/explain ::name-or-id :foo)
  ;; val: :foo fails spec: ::name-or-id at: [:name] predicate: string?
  ;; val: :foo fails spec: ::name-or-id at: [:id] predicate: integer?
  ----
  
  The explain output identifies the problematic value and the predicate it was evaluating. In the last example we see that when there are alternatives, errors across all of the alternatives will be printed.
  
negative.code: [source,clojure]
  ----
  (s/fdef clojure.core/declare
      :args (s/cat :names (s/* simple-symbol?))
      :ret ::s/any)
  ----
  
  