anchor.diff:  
   .Summary of Clojure types and implemented protocols
   [options="header"]
  -|================================================================================
  +|==========================================================================================
   | Name     | Implemented protocols
  -| sequence | Semigroup, Monoid, Functor, Applicative, Monad, MonadZero, MonadPlus
  -| vector   | Semigroup, Monoid, Functor, Applicative, Monad, MonadZero, MonadPlus
  +| sequence | Semigroup, Monoid, Functor, Applicative, Monad, MonadZero, MonadPlus, Foldable
  +| vector   | Semigroup, Monoid, Functor, Applicative, Monad, MonadZero, MonadPlus, Foldable
   | hash-set | Semigroup, Monoid, Functor, Applicative, Monad, MonadZero, MonadPlus
   | hash-map | Semigroup, Monoid
  -|================================================================================
  +|==========================================================================================
   
   
   === Where are the State, Reader, Writer and Continuation monads?
  
positive.code: 1⊕(2⊕(3⊕(4⊕(5⊕(wc)))))
  ----
  
  In languages with strict argument evaluation, the `foldr` does not has much of
  applications because when the data structure to fold grows it tends to consume all the
  stack (causing the well known stack overflow). In case of Clojure, the unique obvious
  case of using foldr is for small datastructures or lazy sequences.
  
negative.code: ;; => 15
  ----
  
  The main difference between `foldl` and `reduce` is that `foldl` has a fixed arity so all
  parameters are mandatory and `foldl` is a generic abstraction that can work with other
  types apart from collections.
  
  As we said previously, the `foldl` and `foldr` differ mainly on how they traverse the
  data structure. Then, for understanding better how they work internally, let's see a
  graphical representation of the `foldl` execution model:
  
  [source, text]
  