Safe Haskell | None |
---|---|
Language | Haskell2010 |
Metadata about what a datatype looks like
In
generics-sop
, the metadata is completely independent of the main
universe. Many generic functions will use this metadata, but other don't,
and yet others might need completely different metadata.
This module defines a datatype to represent standard metadata, i.e., names of the datatype, its constructors, and possibly its record selectors. Metadata descriptions are in general GADTs indexed by the code of the datatype they're associated with, so matching on the metadata will reveal information about the shape of the datatype.
Synopsis
- type Fixity = Int
- type FieldName = String
- type ConstructorName = String
- type ModuleName = String
- type DatatypeName = String
- data FieldInfo :: Type -> Type where
- data StrictnessInfo :: Type -> Type where
-
data
ConstructorInfo
:: [
Type
] ->
Type
where
- Constructor :: SListI xs => ConstructorName -> ConstructorInfo xs
- Infix :: ConstructorName -> Associativity -> Fixity -> ConstructorInfo '[x, y]
- Record :: SListI xs => ConstructorName -> NP FieldInfo xs -> ConstructorInfo xs
-
data
DatatypeInfo
:: [[
Type
]] ->
Type
where
- ADT :: ModuleName -> DatatypeName -> NP ConstructorInfo xss -> POP StrictnessInfo xss -> DatatypeInfo xss
- Newtype :: ModuleName -> DatatypeName -> ConstructorInfo '[x] -> DatatypeInfo '['[x]]
- moduleName :: DatatypeInfo xss -> ModuleName
- datatypeName :: DatatypeInfo xss -> DatatypeName
- constructorInfo :: DatatypeInfo xss -> NP ConstructorInfo xss
- constructorName :: ConstructorInfo xs -> ConstructorName
- fieldName :: FieldInfo a -> FieldName
- data Associativity
- data DecidedStrictness
- data SourceStrictness
- data SourceUnpackedness
Documentation
type ConstructorName = String Source #
The name of a data constructor.
type ModuleName = String Source #
The name of a module.
type DatatypeName = String Source #
The name of a datatype.
data FieldInfo :: Type -> Type where Source #
For records, this functor maps the component to its selector name.
Instances
Functor FieldInfo Source # | |
Eq ( FieldInfo a) Source # | |
Ord ( FieldInfo a) Source # | |
Defined in Generics.SOP.Metadata compare :: FieldInfo a -> FieldInfo a -> Ordering Source # (<) :: FieldInfo a -> FieldInfo a -> Bool Source # (<=) :: FieldInfo a -> FieldInfo a -> Bool Source # (>) :: FieldInfo a -> FieldInfo a -> Bool Source # (>=) :: FieldInfo a -> FieldInfo a -> Bool Source # |
|
Show ( FieldInfo a) Source # | |
data StrictnessInfo :: Type -> Type where Source #
Metadata for strictness information of a field.
Indexed by the type of the field.
Since: 0.4.0.0
Instances
Functor StrictnessInfo Source # | |
Defined in Generics.SOP.Metadata fmap :: (a -> b) -> StrictnessInfo a -> StrictnessInfo b Source # (<$) :: a -> StrictnessInfo b -> StrictnessInfo a Source # |
|
Eq ( StrictnessInfo a) Source # | |
Defined in Generics.SOP.Metadata (==) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # (/=) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # |
|
Ord ( StrictnessInfo a) Source # | |
Defined in Generics.SOP.Metadata compare :: StrictnessInfo a -> StrictnessInfo a -> Ordering Source # (<) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # (<=) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # (>) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # (>=) :: StrictnessInfo a -> StrictnessInfo a -> Bool Source # max :: StrictnessInfo a -> StrictnessInfo a -> StrictnessInfo a Source # min :: StrictnessInfo a -> StrictnessInfo a -> StrictnessInfo a Source # |
|
Show ( StrictnessInfo a) Source # | |
Defined in Generics.SOP.Metadata |
data ConstructorInfo :: [ Type ] -> Type where Source #
Metadata for a single constructor.
This is indexed by the product structure of the constructor components.
Constructor :: SListI xs => ConstructorName -> ConstructorInfo xs | |
Infix :: ConstructorName -> Associativity -> Fixity -> ConstructorInfo '[x, y] | |
Record :: SListI xs => ConstructorName -> NP FieldInfo xs -> ConstructorInfo xs |
Instances
All ( Compose Eq FieldInfo ) xs => Eq ( ConstructorInfo xs) Source # | |
Defined in Generics.SOP.Metadata (==) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # (/=) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # |
|
( All ( Compose Eq FieldInfo ) xs, All ( Compose Ord FieldInfo ) xs) => Ord ( ConstructorInfo xs) Source # | |
Defined in Generics.SOP.Metadata compare :: ConstructorInfo xs -> ConstructorInfo xs -> Ordering Source # (<) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # (<=) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # (>) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # (>=) :: ConstructorInfo xs -> ConstructorInfo xs -> Bool Source # max :: ConstructorInfo xs -> ConstructorInfo xs -> ConstructorInfo xs Source # min :: ConstructorInfo xs -> ConstructorInfo xs -> ConstructorInfo xs Source # |
|
All ( Compose Show FieldInfo ) xs => Show ( ConstructorInfo xs) Source # | |
Defined in Generics.SOP.Metadata |
data DatatypeInfo :: [[ Type ]] -> Type where Source #
Metadata for a datatype.
A value of type
contains the information about a datatype
that is not contained in
DatatypeInfo
c
. This information consists
primarily of the names of the datatype, its constructors, and possibly its
record selectors.
Code
c
The constructor indicates whether the datatype has been declared using
newtype
or not.
ADT :: ModuleName -> DatatypeName -> NP ConstructorInfo xss -> POP StrictnessInfo xss -> DatatypeInfo xss | |
Newtype :: ModuleName -> DatatypeName -> ConstructorInfo '[x] -> DatatypeInfo '['[x]] |
Instances
moduleName :: DatatypeInfo xss -> ModuleName Source #
The module name where a datatype is defined.
Since: 0.2.3.0
datatypeName :: DatatypeInfo xss -> DatatypeName Source #
The name of a datatype (or newtype).
Since: 0.2.3.0
constructorInfo :: DatatypeInfo xss -> NP ConstructorInfo xss Source #
The constructor info for a datatype (or newtype).
Since: 0.2.3.0
constructorName :: ConstructorInfo xs -> ConstructorName Source #
The name of a constructor.
Since: 0.2.3.0
re-exports
data Associativity Source #
Datatype to represent the associativity of a constructor
Instances
data DecidedStrictness Source #
The strictness that GHC infers for a field during compilation. Whereas
there are nine different combinations of
SourceUnpackedness
and
SourceStrictness
, the strictness that GHC decides will ultimately be one
of lazy, strict, or unpacked. What GHC decides is affected both by what the
user writes in the source code and by GHC flags. As an example, consider
this data type:
data E = ExampleConstructor {-# UNPACK #-} !Int !Int Int
-
If compiled without optimization or other language extensions, then the
fields of
ExampleConstructor
will haveDecidedStrict
,DecidedStrict
, andDecidedLazy
, respectively. -
If compiled with
-XStrictData
enabled, then the fields will haveDecidedStrict
,DecidedStrict
, andDecidedStrict
, respectively. -
If compiled with
-O2
enabled, then the fields will haveDecidedUnpack
,DecidedStrict
, andDecidedLazy
, respectively.
Since: base-4.9.0.0
Instances
data SourceStrictness Source #
The strictness of a field as the user wrote it in the source code. For example, in the following data type:
data E = ExampleConstructor Int ~Int !Int
The fields of
ExampleConstructor
have
NoSourceStrictness
,
SourceLazy
, and
SourceStrict
, respectively.
Since: base-4.9.0.0
Instances
data SourceUnpackedness Source #
The unpackedness of a field as the user wrote it in the source code. For example, in the following data type:
data E = ExampleConstructor Int {-# NOUNPACK #-} Int {-# UNPACK #-} Int
The fields of
ExampleConstructor
have
NoSourceUnpackedness
,
SourceNoUnpack
, and
SourceUnpack
, respectively.
Since: base-4.9.0.0