HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulererebase-1.21.2Haskell2010

Data.Data

  • 11 types
  • 2 classes
  • 61 values
classclass Typeable a => Data a where
#

The Data class comprehends a fundamental primitive gfoldl for folding over constructor applications, say terms. This primitive can be instantiated in several ways to map over the immediate subterms of a term; see the gmap combinators later in this class. Indeed, a generic programmer does not necessarily need to use the ingenious gfoldl primitive but rather the intuitive gmap combinators. The gfoldl primitive is completed by means to query top-level constructors, to turn constructor representations into proper terms, and to list all possible datatype constructors. This completion allows us to serve generic programming scenarios like read, show, equality, term generation.

The combinators gmapT, gmapQ, gmapM, etc are all provided with default definitions in terms of gfoldl, leaving open the opportunity to provide datatype-specific definitions. (The inclusion of the gmap combinators as members of class Data allows the programmer or the compiler to derive specialised, and maybe more efficient code per datatype. Note: gfoldl is more higher-order than the gmap combinators. This is subject to ongoing benchmarking experiments. It might turn out that the gmap combinators will be moved out of the class Data.)

Conceptually, the definition of the gmap combinators in terms of the primitive gfoldl requires the identification of the gfoldl function arguments. Technically, we also need to identify the type constructor c for the construction of the result type from the folded term type.

In the definition of gmapQx combinators, we use phantom type constructors for the c in the type of gfoldl because the result type of a query does not involve the (polymorphic) type of the term argument. In the definition of gmapQl we simply use the plain constant type constructor because gfoldl is left-associative anyway and so it is readily suited to fold a left-associative binary operation over the immediate subterms. In the definition of gmapQr, extra effort is needed. We use a higher-order accumulation trick to mediate between left-associative constructor application vs. right-associative binary operation (e.g., (:)). When the query is meant to compute a value of type r, then the result type within generic folding is r -> r. So the result of folding is a function to which we finally pass the right unit.

With the -XDeriveDataTypeable option, GHC can generate instances of the Data class automatically. For example, given the declaration

data T a b = C1 a b | C2 deriving (Typeable, Data)

GHC will generate an instance that is equivalent to

instance (Data a, Data b) => Data (T a b) where
    gfoldl k z (C1 a b) = z C1 `k` a `k` b
    gfoldl k z C2       = z C2

    gunfold k z c = case constrIndex c of
                        1 -> k (k (z C1))
                        2 -> z C2

    toConstr (C1 _ _) = con_C1
    toConstr C2       = con_C2

    dataTypeOf _ = ty_T

con_C1 = mkConstr ty_T "C1" [] Prefix
con_C2 = mkConstr ty_T "C2" [] Prefix
ty_T   = mkDataType "Module.T" [con_C1, con_C2]

This is suitable for datatypes that are exported transparently.

Methods

  • gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> a -> c a

    Left-associative fold operation for constructor applications.

    The type of gfoldl is a headache, but operationally it is a simple generalisation of a list fold.

    The default definition for gfoldl is const id, which is suitable for abstract datatypes with no substructures.

  • gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c a

    Unfolding constructor applications

  • toConstr :: a -> Constr

    Obtaining the constructor from a given datum. For proper terms, this is meant to be the top-level constructor. Primitive datatypes are here viewed as potentially infinite sets of values (i.e., constructors).

  • dataTypeOf :: a -> DataType

    The outer type constructor of the type

  • dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c a)

    Mediate types and unary type constructors.

    In Data instances of the form

        instance (Data a, ...) => Data (T a)
    

    dataCast1 should be defined as gcast1.

    The default definition is const Nothing, which is appropriate for instances of other forms.

  • dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c a)

    Mediate types and binary type constructors.

    In Data instances of the form

        instance (Data a, Data b, ...) => Data (T a b)
    

    dataCast2 should be defined as gcast2.

    The default definition is const Nothing, which is appropriate for instances of other forms.

  • gmapT :: (forall b. Data b => b -> b) -> a -> a

    A generic transformation that maps over the immediate subterms

    The default definition instantiates the type constructor c in the type of gfoldl to an identity datatype constructor, using the isomorphism pair as injection and projection.

  • gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> a -> r

    A generic query with a left-associative binary operator

  • gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> a -> r

    A generic query with a right-associative binary operator

  • gmapQ :: (forall d. Data d => d -> u) -> a -> [u]

    A generic query that processes the immediate subterms and returns a list of results. The list is given in the same order as originally specified in the declaration of the data constructors.

  • gmapQi :: Int -> (forall d. Data d => d -> u) -> a -> u

    A generic query that processes one child by index (zero-based)

  • gmapM :: Monad m => (forall d. Data d => d -> m d) -> a -> m a

    A generic monadic transformation that maps over the immediate subterms

    The default definition instantiates the type constructor c in the type of gfoldl to the monad datatype constructor, defining injection and projection using return and >>=.

  • gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a

    Transformation of at least one immediate subterm does not fail

  • gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> a -> m a

    Transformation of one immediate subterm with success

Instances205Data, …
  • Data ByteArrayDefined in base-4.20.2.0 · Data.Array.Byte
  • Data ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Internal.Type
  • Data ByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Lazy.Internal
  • Data ShortByteStringDefined in bytestring-0.12.2.0 · Data.ByteString.Short.Internal
  • Data IntSetDefined in containers-0.7 · Data.IntSet.Internal
  • Data IntegerDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data NaturalDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data VoidDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data AllDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data AnyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data VersionDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data SpecConstrAnnotationDefined in ghc-internal-9.1003.0 · GHC.Internal.Exts
  • Data IntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data WordPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data AssociativityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data DecidedStrictnessDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data FixityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data SourceStrictnessDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data SourceUnpackednessDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Int16Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Int32Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Int64Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Int8Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Word16Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Word32Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Word64Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data Word8Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data BoolDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data CharDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data DoubleDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data FloatDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data IntDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data OrderingDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data WordDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data ScientificDefined in scientific-0.3.8.0 · Data.Scientific
  • Data AnnLookupDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data AnnTargetDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data BangDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data BndrVisDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data BodyDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data BytesDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data CallconvDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ClauseDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ConDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data DecDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data DecidedStrictnessDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data DerivClauseDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data DerivStrategyDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data DocLocDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ExpDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data FamilyResultSigDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data FixityDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data FixityDirectionDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ForeignDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data FunDepDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data GuardDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data InfoDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data InjectivityAnnDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data InlineDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data LitDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data LocDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data MatchDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ModNameDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ModuleDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data ModuleInfoDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data NameDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data NameFlavourDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data NameSpaceDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data NamespaceSpecifierDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data OccNameDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data OverlapDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PatDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PatSynArgsDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PatSynDirDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PhasesDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PkgNameDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data PragmaDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data RangeDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data RoleDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data RuleBndrDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data RuleMatchDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data SafetyDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data SourceStrictnessDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data SourceUnpackednessDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data SpecificityDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data StmtDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data TyLitDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data TySynEqnDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data TypeDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data TypeFamilyHeadDefined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data TextDefined in text-2.1.3 · Data.Text · orphan

    This instance preserves data abstraction at the cost of inefficiency. We omit reflection services for the sake of data abstraction.

    This instance was created by copying the updated behavior of Data.Set.Set and Data.Map.Data.Map.Map. If you feel a mistake has been made, please feel free to submit improvements.

    The original discussion is archived here: could we get a Data instance for Data.Text.Text?

    The followup discussion that changed the behavior of Set and Data.Map.Map is archived here: Proposal: Allow gunfold for Data.Map, ...

  • Data TextDefined in text-2.1.3 · Data.Text.Lazy · orphan

    This instance preserves data abstraction at the cost of inefficiency. We omit reflection services for the sake of data abstraction.

    This instance was created by copying the updated behavior of Data.Text.Text

  • Data ConstructorInfoDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data ConstructorVariantDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data DatatypeInfoDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data DatatypeVariantDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data FieldStrictnessDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data StrictnessDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data UnpackednessDefined in th-abstraction-0.7.1.0 · Language.Haskell.TH.Datatype
  • Data CalendarDiffDaysDefined in time-1.12.2 · Data.Time.Calendar.CalendarDiffDays
  • Data DayDefined in time-1.12.2 · Data.Time.Calendar.Days
  • Data MonthDefined in time-1.12.2 · Data.Time.Calendar.Month
  • Data QuarterDefined in time-1.12.2 · Data.Time.Calendar.Quarter
  • Data QuarterOfYearDefined in time-1.12.2 · Data.Time.Calendar.Quarter
  • Data DayOfWeekDefined in time-1.12.2 · Data.Time.Calendar.Week
  • Data AbsoluteTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.AbsoluteTime
  • Data DiffTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.DiffTime
  • Data NominalDiffTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.NominalDiffTime
  • Data SystemTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.SystemTime
  • Data UTCTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.UTCTime
  • Data UniversalTimeDefined in time-1.12.2 · Data.Time.Clock.Internal.UniversalTime
  • Data CalendarDiffTimeDefined in time-1.12.2 · Data.Time.LocalTime.Internal.CalendarDiffTime
  • Data LocalTimeDefined in time-1.12.2 · Data.Time.LocalTime.Internal.LocalTime
  • Data TimeOfDayDefined in time-1.12.2 · Data.Time.LocalTime.Internal.TimeOfDay
  • Data TimeZoneDefined in time-1.12.2 · Data.Time.LocalTime.Internal.TimeZone
  • Data ZonedTimeDefined in time-1.12.2 · Data.Time.LocalTime.Internal.ZonedTime
  • Data UUIDDefined in uuid-types-1.0.6 · Data.UUID.Types.Internal
  • Data ()Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Complex a)Defined in base-4.20.2.0 · Data.Complex
  • Data a => Data (First a)Defined in base-4.20.2.0 · Data.Semigroup
  • Data a => Data (Last a)Defined in base-4.20.2.0 · Data.Semigroup
  • Data a => Data (Max a)Defined in base-4.20.2.0 · Data.Semigroup
  • Data a => Data (Min a)Defined in base-4.20.2.0 · Data.Semigroup
  • Data a => Data (IntMap a)Defined in containers-0.7 · Data.IntMap.Internal
  • Data a => Data (Seq a)Defined in containers-0.7 · Data.Sequence.Internal
  • Data a => Data (ViewL a)Defined in containers-0.7 · Data.Sequence.Internal
  • Data a => Data (ViewR a)Defined in containers-0.7 · Data.Sequence.Internal
  • Data a => Data (Tree a)Defined in containers-0.7 · Data.Tree
  • Data a => Data (NonEmpty a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (First a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Last a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Down a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Dual a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Product a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Sum a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (ConstPtr a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (ForeignPtr a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (ZipList a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Functor.ZipList
  • Data a => Data (Maybe a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Ptr a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Data a => Data (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArray
  • Data a => Data (Vector a)Defined in vector-0.13.2.0 · Data.Vector
  • Data a => Data (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Strict
  • Data a => Data (a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data a => Data [a]Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data

    For historical reasons, the constructor name used for (:) is "(:)". In a derived instance, it would be ":".

  • Data flag => Data (TyVarBndr flag)Defined in template-haskell-2.22.0.0 · Language.Haskell.TH.Syntax
  • Data m => Data (WrappedMonoid m)Defined in base-4.20.2.0 · Data.Semigroup
  • Data p => Data (Par1 p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data vertex => Data (SCC vertex)Defined in containers-0.7 · Data.Graph
  • Typeable s => Data (MutableByteArray s)Defined in base-4.20.2.0 · Data.Array.Byte
  • (Data a, Storable a) => Data (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Storable
  • (Data a, Integral a) => Data (Ratio a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Ord a) => Data (Set a)Defined in containers-0.7 · Data.Set.Internal
  • (Data a, Hashable a) => Data (HashSet a)Defined in unordered-containers-0.2.21 · Data.HashSet.Internal
  • (Data a, Prim a) => Data (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Primitive
  • (Data a, Unbox a) => Data (Vector a)Defined in vector-0.13.2.0 · Data.Vector.Unboxed.Base
  • Data p => Data (U1 p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data p => Data (V1 p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Data t => Data (Proxy t)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b) => Data (Arg a b)Defined in base-4.20.2.0 · Data.Semigroup
  • (Data a, Data b) => Data (Either a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b) => Data (a, b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Ix a) => Data (Array a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data k, Data a, Ord k) => Data (Map k a)Defined in containers-0.7 · Data.Map.Internal
  • (Data k, Data v, Hashable k) => Data (HashMap k v)Defined in unordered-containers-0.2.21 · Data.HashMap.Internal
  • (Typeable f, Data (f (Cofree f a)), Data a) => Data (Cofree f a)Defined in free-5.2 · Control.Comonad.Cofree
  • (Typeable f, Data (f (Free f a)), Data a) => Data (Free f a)Defined in free-5.2 · Control.Monad.Free
  • (Typeable f, Data a, Data (f (Free f a))) => Data (Free f a)Defined in free-5.2 · Control.Monad.Free.Ap
  • (Typeable k, Typeable a) => Data (Fixed a)Defined in base-4.20.2.0 · Data.Fixed
  • (Typeable m, Data (m (Either a (IterT m a))), Data a) => Data (IterT m a)Defined in free-5.2 · Control.Monad.Trans.Iter
  • (Typeable m, Typeable a, Data (m a)) => Data (WrappedMonad m a)Defined in base-4.20.2.0 · Control.Applicative
  • (Typeable s, Typeable a) => Data (MutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • (Typeable s, Typeable a) => Data (SmallMutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArray
  • (Typeable w, Data (w (a, CoiterT w a)), Data a) => Data (CoiterT w a)Defined in free-5.2 · Control.Comonad.Trans.Coiter
  • (Data (f a), Data a, Typeable f) => Data (Ap f a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data (f a), Data a, Typeable f) => Data (Alt f a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data (f p), Typeable f, Data p) => Data (Rec1 f p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Data c) => Data (a, b, c)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data e, Typeable w, Data (w a), Data a) => Data (EnvT e w a)Defined in comonad-5.0.9 · Control.Comonad.Trans.Env
  • (Data s, Data b) => Data (Tagged s b)Defined in tagged-0.8.9 · Data.Tagged
  • (Typeable a, Typeable b, Typeable c, Data (a b c)) => Data (WrappedArrow a b c)Defined in base-4.20.2.0 · Control.Applicative
  • (Typeable b, Typeable k, Data a) => Data (Constant a b)Defined in transformers-0.6.1.1 · Data.Functor.Constant
  • (Typeable f, Data a, Data (f b), Data b) => Data (CofreeF f a b)Defined in free-5.2 · Control.Comonad.Trans.Cofree
  • (Typeable f, Typeable b, Data a, Data (f b)) => Data (FreeF f a b)Defined in free-5.2 · Control.Monad.Trans.Free
  • (Typeable f, Typeable b, Data a, Data (f b)) => Data (FreeF f a b)Defined in free-5.2 · Control.Monad.Trans.Free.Ap
  • (Typeable f, Typeable m, Data (m (FreeF f a (FreeT f m a))), Data a) => Data (FreeT f m a)Defined in free-5.2 · Control.Monad.Trans.Free.Ap
  • (Typeable f, Typeable w, Data (w (CofreeF f a (CofreeT f w a))), Data a) => Data (CofreeT f w a)Defined in free-5.2 · Control.Comonad.Trans.Cofree
  • (Typeable k, Data a, Typeable b) => Data (Const a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Coercible a b, Data a, Data b) => Data (Coercion a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (a ~ b, Data a) => Data (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Data c, Data d) => Data (a, b, c, d)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Typeable a, Typeable f, Typeable g, Typeable k, Data (f a), Data (g a)) => Data (Product f g a)Defined in base-4.20.2.0 · Data.Functor.Product
  • (Typeable a, Typeable f, Typeable g, Typeable k, Data (f a), Data (g a)) => Data (Sum f g a)Defined in base-4.20.2.0 · Data.Functor.Sum
  • (Typeable f, Typeable g, Data p, Data (f p), Data (g p)) => Data ((:*:) f g p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Typeable f, Typeable g, Data p, Data (f p), Data (g p)) => Data ((:+:) f g p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Typeable i, Data p, Data c) => Data (K1 i c p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Typeable i, Typeable j, Typeable a, Typeable b, a ~~ b) => Data (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Data c, Data d, Data e) => Data (a, b, c, d, e)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data p, Data (f p), Typeable c, Typeable i, Typeable f) => Data (M1 i c f p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Typeable a, Typeable f, Typeable g, Typeable k1, Typeable k2, Data (f (g a))) => Data (Compose f g a)Defined in base-4.20.2.0 · Data.Functor.Compose
  • (Typeable f, Typeable g, Data p, Data (f (g p))) => Data ((:.:) f g p)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Data c, Data d, Data e, Data f) => Data (a, b, c, d, e, f)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • (Data a, Data b, Data c, Data d, Data e, Data f, Data g) => Data (a, b, c, d, e, f, g)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
datadata Proxy (t :: k)
#

Proxy is a type that holds no data, but has a phantom parameter of arbitrary type (or even kind). Its use is to provide type information, even though there is no value available of that type (or it may be too costly to create one).

Historically, Proxy :: Proxy a is a safer alternative to the undefined :: a idiom.

Example1 expression
Proxy :: Proxy (Void, Int -> Int)Proxy

Proxy can even hold types of higher kinds,

Example1 expression
Proxy :: Proxy EitherProxy
Example1 expression
Proxy :: Proxy FunctorProxy
Example1 expression
Proxy :: Proxy complicatedStructureProxy
Instances66Generic1, FoldableWithIndex, FunctorWithIndex, TraversableWithIndex, Monad, Functor, …
  • Generic1 ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Generics
  • FoldableWithIndex Void ProxyDefined in indexed-traversable-0.1.4 · WithIndex
  • FunctorWithIndex Void ProxyDefined in indexed-traversable-0.1.4 · WithIndex
  • TraversableWithIndex Void ProxyDefined in indexed-traversable-0.1.4 · WithIndex
  • Monad ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Functor ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Applicative ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Foldable ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Foldable
  • Traversable ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Traversable
  • Alternative ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • MonadPlus ProxyDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • MonadZip ProxyDefined in base-4.20.2.0 · Control.Monad.Zip
  • Eq1 ProxyDefined in base-4.20.2.0 · Data.Functor.Classes
  • Ord1 ProxyDefined in base-4.20.2.0 · Data.Functor.Classes
  • Read1 ProxyDefined in base-4.20.2.0 · Data.Functor.Classes
  • Show1 ProxyDefined in base-4.20.2.0 · Data.Functor.Classes
  • Contravariant ProxyDefined in base-4.20.2.0 · Data.Functor.Contravariant
  • NFData1 ProxyDefined in deepseq-1.5.0.0 · Control.DeepSeq
  • Hashable1 ProxyDefined in hashable-1.4.7.0 · Data.Hashable.Class
  • Distributive ProxyDefined in distributive-0.6.2.1 · Data.Distributive
  • Decidable ProxyDefined in contravariant-1.5.5 · Data.Functor.Contravariant.Divisible
  • Divisible ProxyDefined in contravariant-1.5.5 · Data.Functor.Contravariant.Divisible
  • Alt ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Alt
  • Apply ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Bind.Class
  • Bind ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Bind.Class
  • Extend ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Extend
  • Conclude ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Conclude
  • Decide ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Decide
  • Divise ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Contravariant.Divise
  • Plus ProxyDefined in semigroupoids-6.0.1 · Data.Functor.Plus
  • Representable ProxyDefined in adjunctions-4.4.3 · Data.Functor.Rep
  • Representable ProxyDefined in adjunctions-4.4.3 · Data.Functor.Contravariant.Rep
  • Invariant ProxyDefined in invariant-0.6.4 · Data.Functor.Invariant
  • Selective ProxyDefined in selective-0.7.0.1 · Control.Selective
  • Adjustable ProxyDefined in keys-3.12.3 · Data.Key
  • FoldableWithKey ProxyDefined in keys-3.12.3 · Data.Key
  • Indexable ProxyDefined in keys-3.12.3 · Data.Key
  • Keyed ProxyDefined in keys-3.12.3 · Data.Key
  • Lookup ProxyDefined in keys-3.12.3 · Data.Key
  • TraversableWithKey ProxyDefined in keys-3.12.3 · Data.Key
  • Zip ProxyDefined in keys-3.12.3 · Data.Key
  • ZipWithKey ProxyDefined in keys-3.12.3 · Data.Key
  • Pointed ProxyDefined in pointed-5.0.4 · Data.Pointed
  • Cosieve Tagged ProxyDefined in profunctors-5.6.3 · Data.Profunctor.Sieve
  • Bounded (Proxy t)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Enum (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Eq (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Data t => Data (Proxy t)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Ord (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Read (Proxy t)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Show (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Ix (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Generic (Proxy t)Defined in ghc-internal-9.1003.0 · GHC.Internal.Generics
  • Semigroup (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • Monoid (Proxy s)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Proxy
  • NFData (Proxy a)Defined in deepseq-1.5.0.0 · Control.DeepSeq
  • Hashable (Proxy a)Defined in hashable-1.4.7.0 · Data.Hashable.Class
  • Default (Proxy a)Defined in data-default-0.8.0.1 · Data.Default.Internal
  • Abelian (Proxy x)Defined in groups-0.5.3 · Data.Group
  • Cyclic (Proxy x)Defined in groups-0.5.3 · Data.Group
  • Group (Proxy x)Defined in groups-0.5.3 · Data.Group

    Trivial group, Functor style.

  • type Rep (Proxy t) = D1 ('MetaData "Proxy" "GHC.Internal.Data.Proxy" "ghc-internal" 'False) (C1 ('MetaCons "Proxy" 'PrefixI 'False) U1)Defined in ghc-internal-9.1003.0 · GHC.Internal.Generics
  • type Rep1 Proxy = D1 ('MetaData "Proxy" "GHC.Internal.Data.Proxy" "ghc-internal" 'False) (C1 ('MetaCons "Proxy" 'PrefixI 'False) U1)Defined in ghc-internal-9.1003.0 · GHC.Internal.Generics
  • type Rep Proxy = VoidDefined in adjunctions-4.4.3 · Data.Functor.Rep
  • type Rep Proxy = ()Defined in adjunctions-4.4.3 · Data.Functor.Contravariant.Rep
  • type Key Proxy = VoidDefined in keys-3.12.3 · Data.Key
classclass Typeable (a :: k) where
#

The class Typeable allows a concrete representation of a type to be calculated.

valueconstrFields :: Constr -> [String]
#

Gets the field labels of a constructor. The list of labels is returned in the same order as they were given in the original constructor declaration.

Applies a type to a function type. Returns: Just u if the first argument represents a function of type t -> u and the second argument represents a function of type t. Otherwise, returns Nothing.

valuesplitTyConApp :: TypeRep -> (TyCon, [TypeRep])
#

Splits a type constructor application. Note that if the type constructor is polymorphic, this will not return the kinds that were used.

valuetypeRep :: Typeable a => proxy a -> TypeRep
#

Takes a value of type a and returns a concrete representation of that type.

typetype ConIndex = Int
#

Unique index for datatype constructors, counting from 1 in the order they are given in the program text.

datadata Constr
#

Representation of constructors. Note that equality on constructors with different types may not work -- i.e. the constructors for False and Nothing may compare equal.

Instances2Eq, Show
  • Eq ConstrDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data

    Equality of constructors

  • Show ConstrDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
datadata DataType
#

Representation of datatypes. A package of constructor representations with names of type and module.

Instances1Show
  • Show DataTypeDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
datadata Fixity
#

Fixity of constructors

Instances2Eq, Show
  • Eq FixityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Show FixityDefined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
datadata (:~:) (a :: k) (b :: k) where
#

Propositional equality. If a :~: b is inhabited by some terminating value, then the type a is the same as the type b. To use this equality in practice, pattern-match on the a :~: b to get out the Refl constructor; in the body of the pattern-match, the compiler knows that a ~ b.

Constructors

Instances15Category, Groupoid, Semigroupoid, TestCoercion, TestEquality, NFData2, …
  • Category (:~:)Defined in ghc-internal-9.1003.0 · GHC.Internal.Control.Category
  • Groupoid (:~:)Defined in semigroupoids-6.0.1 · Data.Groupoid
  • Semigroupoid (:~:)Defined in semigroupoids-6.0.1 · Data.Semigroupoid
  • TestCoercion ((:~:) a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Coercion
  • TestEquality ((:~:) a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • NFData2 (:~:)Defined in deepseq-1.5.0.0 · Control.DeepSeq
  • NFData1 ((:~:) a)Defined in deepseq-1.5.0.0 · Control.DeepSeq
  • a ~ b => Bounded (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • a ~ b => Enum (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • Eq (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • (a ~ b, Data a) => Data (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Ord (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • a ~ b => Read (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • Show (a :~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • NFData (a :~: b)Defined in deepseq-1.5.0.0 · Control.DeepSeq
datadata (:~~:) (a :: k1) (b :: k2) where
#

Kind heterogeneous propositional equality. Like :~:, a :~~: b is inhabited by a terminating value if and only if a is the same type as b.

Constructors

Instances15Category, Groupoid, Semigroupoid, TestCoercion, TestEquality, NFData2, …
  • Category (:~~:)Defined in ghc-internal-9.1003.0 · GHC.Internal.Control.Category
  • Groupoid (:~~:)Defined in semigroupoids-6.0.1 · Data.Groupoid
  • Semigroupoid (:~~:)Defined in semigroupoids-6.0.1 · Data.Semigroupoid
  • TestCoercion ((:~~:) a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Coercion
  • TestEquality ((:~~:) a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • NFData2 (:~~:)Defined in deepseq-1.5.0.0 · Control.DeepSeq
  • NFData1 ((:~~:) a)Defined in deepseq-1.5.0.0 · Control.DeepSeq
  • a ~~ b => Bounded (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • a ~~ b => Enum (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • Eq (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • (Typeable i, Typeable j, Typeable a, Typeable b, a ~~ b) => Data (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Data
  • Ord (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • a ~~ b => Read (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • Show (a :~~: b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Type.Equality
  • NFData (a :~~: b)Defined in deepseq-1.5.0.0 · Control.DeepSeq
typetype TypeRep = SomeTypeRep
#

A quantified type representation.

Instances1NFData
  • NFData TypeRepDefined in deepseq-1.5.0.0 · Control.DeepSeq

    NOTE: Prior to deepseq-1.4.4.0 this instance was only defined for base-4.8.0.0 and later.

datadata TyCon
#
Instances5Eq, Ord, Show, NFData, Binary
  • Eq TyConDefined in ghc-prim-0.12.0 · GHC.Classes
  • Ord TyConDefined in ghc-prim-0.12.0 · GHC.Classes
  • Show TyConDefined in ghc-internal-9.1003.0 · GHC.Internal.Show
  • NFData TyConDefined in deepseq-1.5.0.0 · Control.DeepSeq

    NOTE: Prior to deepseq-1.4.4.0 this instance was only defined for base-4.8.0.0 and later.

  • Binary TyConDefined in binary-0.8.9.3 · Data.Binary.Class