anchor.diff:  (s/def :error/code integer?)
   ----
   
  -We then need a multimethod that defines a dispatch function for choosing the selector (here our `:event/type` field) and returning the appropriate spec based on the value:
  -
  -[source,clojure]
  -----
  -(defmulti event-type :event/type :default ::s/invalid)
  -(defmethod event-type ::s/invalid [_] nil)
  +We then need a multimethod that defines a dispatch function for choosing the selector (here our `:event/type` field) and returns the appropriate spec based on the value:
  +
  +[source,clojure]
  +----
  +(defmulti event-type :event/type)
   (defmethod event-type :event/search [_]
     (s/keys :req [:event/type :event/timestamp :search/url]))
   (defmethod event-type :event/error [_]
     (s/keys :req [:event/type :event/timestamp :error/message :error/code]))
   ----
   
  -It is **required** that this multimethod have a nil-returning default method for `::s/invalid`. Other handlers should ignore their argument and return the spec for the specified type. Here we've fully spec'ed two possible events - a "search" event and an "error" event.
  +The methods should ignore their argument and return the spec for the specified type. Here we've fully spec'ed two possible events - a "search" event and an "error" event.
   
   And then finally we are ready to declare our `multi-spec` and try it out.
   
  
positive.code: [source,clojure]
  ----
  (declare 100)
  CompilerException java.lang.IllegalArgumentException: Call to clojure.core/declare did not conform to spec:
  At: [:args] val: (100) fails predicate: (cat :names (* symbol?)),  Extra input
  :clojure.spec/args  ((declare 100) nil 100)
  , compiling:(user:320:3)
  ----
  
  This is an area that may change further before final release.
  
  == Conformers
  
  
negative.code: [source,clojure]
  ----
  (ranged-rand 8 5)
  ;; CompilerException clojure.lang.ExceptionInfo: Call to #'ranged-rand did not conform to spec:
  ;; val: {:start 8, :end 5} fails at: [:args] predicate: (< (:start %) (:end %))
  ;; :clojure.spec/args  (8 5)
  ----
  
  The error fails the second args predicate that checks `(< start end)`. 
  