anchor.diff:  
   == Entity Maps
   
  -Clojure programs rely heavily on passing around maps of data and this is one of the areas where spec takes a novel approach
  -compared to other libs. Rather than defining attribute (key+value) specifications at the map level, specs assign meaning to individual attributes,
  +Clojure programs rely heavily on passing around maps of data. A common approach in other libraries is to describe each entity type, combining both the keys it contains and the structure of their values. Rather than define attribute (key+value) specifications in the scope of the entity (the map), specs assign meaning to individual attributes,
   then collect them into maps using set semantics (on the keys). This approach allows us to start assigning (and sharing)
   semantics at the attribute level across our libraries and applications.
   
  
positive.code: ;;=> {:names-kw :names, :names ["a" "b"], :nums-kw :nums, :nums [1 2 3]}
  ----
  
  If the `spec`s were removed this spec would instead match a sequence like `[:names "a" "b" :nums 1 2 3]`.
  
  [source,clojure]
  ----
  
negative.code: ;;=> (* (cat :opt keyword? :val boolean?))
  ----
  
  Spec also defines one additional regex operator, http://clojure.github.io/clojure/branch-master/clojure.spec-api.html#clojure.spec/&[`&`], which takes a regex operator and constrains it with one or more additional predicates. This can be used to create regular expressions with additional constraints that would otherwise require custom predicates. For example, consider wanting to match only sequences with an even number of strings:
  
  [source,clojure]
  ----
  