-----------------------------------------------------------------------------
-- |
-- Module:  Data.Functor.Transformer
--
-- Functors on indexed-types.
----------------------------------------------------------------------------
module Data.Functor.Transformer
  (
    -- * Functor
    Func.FunctorT(tmap)

    -- * Traversable
  , Trav.TraversableT(ttraverse)
    -- ** Utility functions
  , Trav.ttraverse_
  , Trav.tfoldMap
  , Trav.tsequence
  , Trav.tsequence'

    -- * Distributive
  , Dist.DistributiveT(tdistribute)
  , Dist.tdistribute'
  , Dist.tcotraverse
  , Dist.tdecompose
  , Dist.trecompose

    -- * Applicative
  , Appl.ApplicativeT(tpure, tprod)
    -- ** Utility functions
  , Appl.tzip
  , Appl.tunzip
  , Appl.tzipWith
  , Appl.tzipWith3
  , Appl.tzipWith4

    -- * Monad
  , Mon.MonadT(..)

    -- * Constraints and instance dictionaries
  , Cons.ConstraintsT(..)
  , Cons.AllTF

    -- ** Utility functions
  , Cons.tmapC
  , Cons.ttraverseC

    -- * Support for generic derivations
  , GenericsN.Rec(..)
  )

where

import qualified Barbies.Internal.ApplicativeT as Appl
import qualified Barbies.Internal.ConstraintsT as Cons
import qualified Barbies.Internal.DistributiveT as Dist
import qualified Barbies.Internal.FunctorT as Func
import qualified Barbies.Internal.MonadT as Mon
import qualified Barbies.Internal.TraversableT as Trav

import qualified Data.Generics.GenericN as GenericsN