anchor.diff:  (s/conform ::odds-then-maybe-even [1])
   ;;=> {:odds [1]}
   (s/explain ::odds-then-maybe-even [100])
  -;; In: [0] val: 100 fails spec: ::odds-then-maybe-even at: [:odds] predicate: odd?
  +;; 100 - failed: odd? in: [0] at: [:odds] spec: :user/odds-then-maybe-even
   
   ;; opts are alternating keywords and booleans
   (s/def ::opts (s/* (s/cat :opt keyword? :val boolean?)))
  
positive.code: [source,clojure]
  ----
  (declare 100)
  ;; ExceptionInfo: Call to clojure.core/declare did not conform to spec:
  ;; In: [0] val: 100 fails at: [:args :names] predicate: simple-symbol?
  ;; :clojure.spec.alpha/args  (100)
  ----
  
  Because macros are always checked during macro expansion, you do not need to call instrument for macro specs.
  
negative.code: (s/conform ::vnum3 [1 2 3])
  ;;=> #{1 2 3}
  (s/explain ::vnum3 #{1 2 3})   ;; not a vector
  ;; #{1 3 2} - failed: vector? spec: :user/vnum3
  (s/explain ::vnum3 [1 1 1])    ;; not distinct
  ;; [1 1 1] - failed: distinct? spec: :user/vnum3
  (s/explain ::vnum3 [1 2 :a])   ;; not a number
  ;; :a - failed: number? in: [2] spec: :user/vnum3
  ----
  
  [NOTE]
  