content: {-# LANGUAGE Safe #-}
  
  -- |
  -- Module      :  Data.Data
  -- Copyright   :  (c) The University of Glasgow, CWI 2001--2004
  -- License     :  BSD-style (see the file libraries/base/LICENSE)
  --
  -- Maintainer  :  libraries@haskell.org
  -- Stability   :  stable
  -- Portability :  non-portable (local universal quantification)
  --
  -- This module provides the 'Data' class with its primitives for
  -- generic programming, along with instances for many datatypes. It
  -- corresponds to a merge between the previous "Data.Generics.Basics"
  -- and almost all of "Data.Generics.Instances". The instances that are
  -- not present in this module were moved to the
  -- @Data.Generics.Instances@ module in the @syb@ package.
  --
  -- \"Scrap your boilerplate\" --- Generic programming in Haskell.  See
  -- <https://wiki.haskell.org/Research_papers/Generics#Scrap_your_boilerplate.21>.
  --
  
  module Data.Data (
  
          -- * Module Data.Typeable re-exported for convenience
          module Data.Typeable,
  
          -- * The Data class for processing constructor applications
          Data(
                  gfoldl,
                  gunfold,
                  toConstr,
                  dataTypeOf,
                  dataCast1,      -- mediate types and unary type constructors
                  dataCast2,      -- mediate types and binary type constructors
                  -- Generic maps defined in terms of gfoldl
                  gmapT,
                  gmapQ,
                  gmapQl,
                  gmapQr,
                  gmapQi,
                  gmapM,
                  gmapMp,
                  gmapMo
              ),
  
          -- * Datatype representations
          DataType,       -- abstract
          -- ** Constructors
          mkDataType,
          mkIntType,
          mkFloatType,
          mkCharType,
          mkNoRepType,
          -- ** Observers
          dataTypeName,
          DataRep(..),
          dataTypeRep,
          -- ** Convenience functions
          repConstr,
          isAlgType,
          dataTypeConstrs,
          indexConstr,
          maxConstrIndex,
          isNorepType,
  
          -- * Data constructor representations
          Constr,         -- abstract
          ConIndex,       -- alias for Int, start at 1
          Fixity(..),
          -- ** Constructors
          mkConstr,
          mkConstrTag,
          mkIntegralConstr,
          mkRealConstr,
          mkCharConstr,
          -- ** Observers
          constrType,
          ConstrRep(..),
          constrRep,
          constrFields,
          constrFixity,
          -- ** Convenience function: algebraic data types
          constrIndex,
          -- ** From strings to constructors and vice versa: all data types
          showConstr,
          readConstr,
  
          -- * Convenience functions: take type constructors apart
          tyconUQname,
          tyconModule,
  
          -- * Generic operations defined in terms of 'gunfold'
          fromConstr,
          fromConstrB,
          fromConstrM
  
    ) where
  
  import GHC.Internal.Data.Data
  import Data.Typeable
  