content: {-# LANGUAGE PolyKinds, UndecidableInstances #-}
  {-# OPTIONS_GHC -fno-warn-unused-binds #-}
  -- | Main module of @sop-core@
  module Data.SOP (
      -- * n-ary datatypes
      NP(..)
    , NS(..)
    , SOP(..)
    , unSOP
    , POP(..)
    , unPOP
      -- * Combinators
      -- ** Constructing products
    , HPure(..)
      -- ** Destructing products
    , hd
    , tl
    , Projection
    , projections
    , shiftProjection
      -- ** Application
    , type (-.->)(..)
    , fn
    , fn_2
    , fn_3
    , fn_4
    , Prod
    , HAp(..)
      -- ** Lifting / mapping
    , hliftA
    , hliftA2
    , hliftA3
    , hcliftA
    , hcliftA2
    , hcliftA3
    , hmap
    , hzipWith
    , hzipWith3
    , hcmap
    , hczipWith
    , hczipWith3
      -- ** Constructing sums
    , Injection
    , injections
    , shift
    , shiftInjection
    , UnProd
    , HApInjs(..)
    , apInjs_NP  -- deprecated export
    , apInjs_POP -- deprecated export
      -- ** Destructing sums
    , unZ
    , HIndex(..)
      -- ** Dealing with @'All' c@
    , hcliftA'
    , hcliftA2'
    , hcliftA3'
      -- ** Comparison
    , compare_NS
    , ccompare_NS
    , compare_SOP
    , ccompare_SOP
      -- ** Collapsing
    , CollapseTo
    , HCollapse(..)
      -- ** Folding and sequencing
    , HTraverse_(..)
    , hcfoldMap
    , hcfor_
    , HSequence(..)
    , hsequence
    , hsequenceK
    , hctraverse
    , hcfor
      -- ** Expanding sums to products
    , HExpand(..)
      -- ** Transformation of index lists and coercions
    , HTrans(..)
    , hfromI
    , htoI
      -- ** Partial operations
    , fromList
      -- * Utilities
      -- ** Basic functors
    , K(..)
    , unK
    , I(..)
    , unI
    , (:.:)(..)
    , unComp
      -- *** Mapping functions
    , mapII
    , mapIK
    , mapKI
    , mapKK
    , mapIII
    , mapIIK
    , mapIKI
    , mapIKK
    , mapKII
    , mapKIK
    , mapKKI
    , mapKKK
      -- ** Mapping constraints
    , All
    , All2
    , cpara_SList
    , ccase_SList
    , AllZip
    , AllZip2
    , AllN
    , AllZipN
      -- ** Other constraints
    , Compose
    , And
    , Top
    , LiftedCoercible
    , SameShapeAs
      -- ** Singletons
    , SList(..)
    , SListI
    , SListI2
    , sList
    , para_SList
    , case_SList
      -- *** Shape of type-level lists
    , Shape(..)
    , shape
    , lengthSList
      -- ** Re-exports
  
  -- Workaround for lack of MIN_TOOL_VERSION macro in Cabal 1.18, see:
  -- https://github.com/well-typed/generics-sop/issues/3
  #ifndef MIN_TOOL_VERSION_haddock
  #define MIN_TOOL_VERSION_haddock(x,y,z) 0
  #endif
  
  #if !(defined(__HADDOCK_VERSION__)) || MIN_TOOL_VERSION_haddock(2,14,0)
    , Proxy(..) -- hidden from old Haddock versions, because it triggers an internal error
  #endif
    ) where
  
  import Data.Proxy (Proxy(..))
  
  import Data.SOP.BasicFunctors
  import Data.SOP.Classes
  import Data.SOP.Constraint
  import Data.SOP.NP
  import Data.SOP.NS
  import Data.SOP.Sing
  
  