-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Haskell 98 semigroupoids: Category sans id
--
-- 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:
--
--

--
-- However, this variation cannot be stated purely in terms of the
-- dependencies of Alt.
--
-- When and if MonadPlus is successfully refactored, this class should
-- also be refactored to remove these instances.
--
-- The right distributive law should extend in the cases where the a
-- Bind or Monad is provided to yield variations of the
-- right distributive law:
--
--