-- | Generic and generalized functors.


module Generic.Functor
  ( -- * Derive functors


    -- ** Unary functors

    gsolomap
  , solomap

    -- ** N-ary functors

  , gmultimap
  , multimap
  , (:+)(..)

    -- ** Derive Functor, Bifunctor, Foldable, Traversable


    -- *** DerivingVia

    -- | The type synonyms 'GenericFunctor' and 'GenericBifunctor' can be

    -- used with the @DerivingVia@ extension to derive 'Functor', 'Bifunctor', and 'Foldable'.

    -- Sadly, 'Traversable' cannot be derived-via.

  , GenericFunctor(..)
  , GenericBifunctor(..)

    -- *** Generic method definitions

  , gfmap
  , gfoldMap
  , gtraverse

    -- **** Bifunctors

  , gbimap
  , gfirst
  , gsecond
  , gbifoldMap
  , gbitraverse

    -- * Auxiliary classes


    -- ** Related to standard classes

  , GFunctor()
  , GFoldable()
  , GFoldMap()
  , GTraversable()
  , GTraverse()

    -- *** Bifunctors

  , GBifunctor()
  , GBimap()
  , GFirst()
  , GSecond()
  , GBifoldable()
  , GBifoldMap()
  , GBitraversable()
  , GBitraverse()

    -- ** Generalized functors

  , GSolomap()
  , Solomap()
  , GMultimap()
  , Multimap()
  ) where

import Generic.Functor.Internal
import Generic.Functor.Internal.Implicit