Provides a wide array of semigroupoids and operations for working with semigroupds.
A Semigroupoid is a Category without the requirement of identity arrows for every object in the category.
When working with comonads you often have the @\<*\>@ portion of an @Applicative@, but
not the @pure@. This was captured in Uustalu and Vene's \"Essence of Dataflow Programming\"
in the form of the @ComonadZip@ class in the days before @Applicative@. Apply provides a weaker invariant, but for the comonads used for data flow programming (found in the streams package), this invariant is preserved. Applicative function composition forms a semigroupoid.
Similarly many structures are nearly a comonad, but not quite, for instance lists provide a reasonable 'extend' operation in the form of 'tails', but do not always contain a value.
Ideally the following relationships would hold:
> Traversable <---- Foldable <--- Functor ------> Alt ---------> Plus Semigroupoid
> | | | | |
> v v v v v
> Traversable1 <--- Foldable1 Apply --------> Applicative -> Alternative Category