Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Generics.SOP.Metadata
Contents
Description
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
- data DatatypeInfo :: [[Type]] -> Type where
- ADT :: ModuleName -> DatatypeName -> NP ConstructorInfo xss -> POP StrictnessInfo xss -> DatatypeInfo xss
- Newtype :: ModuleName -> DatatypeName -> ConstructorInfo '[x] -> DatatypeInfo '['[x]]
- 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 FieldInfo :: Type -> Type where
- type DatatypeName = String
- type ModuleName = String
- type ConstructorName = String
- type FieldName = String
- type Fixity = Int
- data StrictnessInfo :: Type -> Type where
- 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
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.
Constructors
ADT :: ModuleName -> DatatypeName -> NP ConstructorInfo xss -> POP StrictnessInfo xss -> DatatypeInfo xss | |
Newtype :: ModuleName -> DatatypeName -> ConstructorInfo '[x] -> DatatypeInfo '['[x]] |
Instances
data ConstructorInfo :: [Type] -> Type where Source #
Metadata for a single constructor.
This is indexed by the product structure of the constructor components.
Constructors
Constructor :: SListI xs => ConstructorName -> ConstructorInfo xs | |
Infix :: ConstructorName -> Associativity -> Fixity -> ConstructorInfo '[x, y] | |
Record :: SListI xs => ConstructorName -> NP FieldInfo xs -> ConstructorInfo xs |
Instances
data FieldInfo :: Type -> Type where Source #
For records, this functor maps the component to its selector name.
Instances
Functor FieldInfo Source # | |
Show (FieldInfo a) Source # | |
Eq (FieldInfo a) Source # | |
Ord (FieldInfo a) Source # | |
Defined in Generics.SOP.Metadata |
type DatatypeName = String Source #
The name of a datatype.
type ModuleName = String Source #
The name of a module.
type ConstructorName = String Source #
The name of a data constructor.
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
Constructors
StrictnessInfo :: SourceUnpackedness -> SourceStrictness -> DecidedStrictness -> StrictnessInfo a |
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 #
Constructors
LeftAssociative | |
RightAssociative | |
NotAssociative |
Instances
data DecidedStrictness #
Constructors
DecidedLazy | |
DecidedStrict | |
DecidedUnpack |
Instances
data SourceStrictness #
Constructors
NoSourceStrictness | |
SourceLazy | |
SourceStrict |
Instances
data SourceUnpackedness #
Constructors
NoSourceUnpackedness | |
SourceNoUnpack | |
SourceUnpack |