| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Generics.SOP.Type.Metadata
Contents
Description
Type-level metadata
This module provides datatypes (to be used promoted) that can represent the metadata of Haskell datatypes on the type level.
We do not reuse the term-level metadata types, because these are GADTs that incorporate additional invariants. We could (at least in GHC 8) impose the same invariants on the type level as well, but some tests have revealed that the resulting type are rather inconvenient to work with.
So we use simple datatypes to represent the type-level metadata, even if this means that some invariants are not explicitly captured.
We establish a relation between the term- and type-level versions of the metadata by automatically computing the term-level version from the type-level version.
As we now have two versions of metadata (term-level and type-level) with very similar, yet slightly different datatype definitions, the names between the modules clash, and this module is recommended to be imported qualified when needed.
The interface exported by this module is still somewhat experimental.
Since: 0.3.0.0
Synopsis
- class DemoteAssociativity (a :: Associativity) where
- demoteAssociativity :: proxy a -> Associativity
- class DemoteFieldInfo (x :: FieldInfo) (a :: Type) where
- demoteFieldInfo :: proxy x -> FieldInfo a
- class SListI xs => DemoteFieldInfos (fs :: [FieldInfo]) (xs :: [Type]) where
- demoteFieldInfos :: proxy fs -> NP FieldInfo xs
- class DemoteConstructorInfo (x :: ConstructorInfo) (xs :: [Type]) where
- demoteConstructorInfo :: proxy x -> ConstructorInfo xs
- class DemoteConstructorInfos (cs :: [ConstructorInfo]) (xss :: [[Type]]) where
- demoteConstructorInfos :: proxy cs -> NP ConstructorInfo xss
- class DemoteDatatypeInfo (x :: DatatypeInfo) (xss :: [[Type]]) where
- demoteDatatypeInfo :: proxy x -> DatatypeInfo xss
- type Fixity = Nat
- type FieldName = Symbol
- type ConstructorName = Symbol
- type ModuleName = Symbol
- type DatatypeName = Symbol
- data FieldInfo = FieldInfo FieldName
- data ConstructorInfo
- data DatatypeInfo
- data Associativity
Documentation
class DemoteAssociativity (a :: Associativity) where #
Class for computing term-level associativity information from type-level associativity information.
Since: 0.3.0.0
Methods
demoteAssociativity :: proxy a -> Associativity #
Given a proxy of some type-level associativity information, return the corresponding term-level information.
Since: 0.3.0.0
Instances
| DemoteAssociativity LeftAssociative # | |
Defined in Generics.SOP.Type.Metadata Methods demoteAssociativity :: proxy LeftAssociative -> Associativity # | |
| DemoteAssociativity RightAssociative # | |
Defined in Generics.SOP.Type.Metadata Methods demoteAssociativity :: proxy RightAssociative -> Associativity # | |
| DemoteAssociativity NotAssociative # | |
Defined in Generics.SOP.Type.Metadata Methods demoteAssociativity :: proxy NotAssociative -> Associativity # | |
class DemoteFieldInfo (x :: FieldInfo) (a :: Type) where #
Class for computing term-level field information from type-level field information.
Since: 0.3.0.0
Methods
demoteFieldInfo :: proxy x -> FieldInfo a #
Given a proxy of some type-level field information, return the corresponding term-level information.
Since: 0.3.0.0
Instances
| KnownSymbol s => DemoteFieldInfo (FieldInfo s) a # | |
Defined in Generics.SOP.Type.Metadata Methods demoteFieldInfo :: proxy (FieldInfo s) -> FieldInfo0 a # | |
class SListI xs => DemoteFieldInfos (fs :: [FieldInfo]) (xs :: [Type]) where #
Class for computing term-level field information from type-level field information.
Since: 0.3.0.0
Methods
demoteFieldInfos :: proxy fs -> NP FieldInfo xs #
Given a proxy of some type-level field information, return the corresponding term-level information as a product.
Since: 0.3.0.0
Instances
| DemoteFieldInfos ([] :: [FieldInfo]) ([] :: [Type]) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteFieldInfos :: proxy [] -> NP FieldInfo0 [] # | |
| (DemoteFieldInfo f x, DemoteFieldInfos fs xs) => DemoteFieldInfos (f ': fs) (x ': xs) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteFieldInfos :: proxy (f ': fs) -> NP FieldInfo (x ': xs) # | |
class DemoteConstructorInfo (x :: ConstructorInfo) (xs :: [Type]) where #
Class for computing term-level constructor information from type-level constructor information.
Since: 0.3.0.0
Methods
demoteConstructorInfo :: proxy x -> ConstructorInfo xs #
Given a proxy of some type-level constructor information, return the corresponding term-level information.
Since: 0.3.0.0
Instances
| (KnownSymbol s, SListI xs) => DemoteConstructorInfo (Constructor s) xs # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfo :: proxy (Constructor s) -> ConstructorInfo xs # | |
| (KnownSymbol s, DemoteFieldInfos fs xs) => DemoteConstructorInfo (Record s fs) xs # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfo :: proxy (Record s fs) -> ConstructorInfo xs # | |
| (KnownSymbol s, DemoteAssociativity a, KnownNat f) => DemoteConstructorInfo (Infix s a f) (y ': (z ': ([] :: [Type]))) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfo :: proxy (Infix s a f) -> ConstructorInfo (y ': (z ': [])) # | |
class DemoteConstructorInfos (cs :: [ConstructorInfo]) (xss :: [[Type]]) where #
Class for computing term-level constructor information from type-level constructor information.
Since: 0.3.0.0
Methods
demoteConstructorInfos :: proxy cs -> NP ConstructorInfo xss #
Given a proxy of some type-level constructor information, return the corresponding term-level information as a product.
Since: 0.3.0.0
Instances
| DemoteConstructorInfos ([] :: [ConstructorInfo]) ([] :: [[Type]]) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfos :: proxy [] -> NP ConstructorInfo0 [] # | |
| (DemoteConstructorInfo c xs, DemoteConstructorInfos cs xss) => DemoteConstructorInfos (c ': cs) (xs ': xss) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfos :: proxy (c ': cs) -> NP ConstructorInfo (xs ': xss) # | |
class DemoteDatatypeInfo (x :: DatatypeInfo) (xss :: [[Type]]) where #
Class for computing term-level datatype information from type-level datatype information.
Since: 0.3.0.0
Methods
demoteDatatypeInfo :: proxy x -> DatatypeInfo xss #
Given a proxy of some type-level datatype information, return the corresponding term-level information.
Since: 0.3.0.0
Instances
| (KnownSymbol m, KnownSymbol d, DemoteConstructorInfos cs xss) => DemoteDatatypeInfo (ADT m d cs) xss # | |
Defined in Generics.SOP.Type.Metadata Methods demoteDatatypeInfo :: proxy (ADT m d cs) -> DatatypeInfo xss # | |
| (KnownSymbol m, KnownSymbol d, DemoteConstructorInfo c (x ': ([] :: [Type]))) => DemoteDatatypeInfo (Newtype m d c) ((x ': ([] :: [Type])) ': ([] :: [[Type]])) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteDatatypeInfo :: proxy (Newtype m d c) -> DatatypeInfo ((x ': []) ': []) # | |
type ConstructorName = Symbol #
The name of a data constructor.
type ModuleName = Symbol #
The name of a module.
type DatatypeName = Symbol #
The name of a datatype.
Metadata for a single record field (to be used promoted).
Since: 0.3.0.0
Instances
| DemoteFieldInfos ([] :: [FieldInfo]) ([] :: [Type]) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteFieldInfos :: proxy [] -> NP FieldInfo0 [] # | |
| (DemoteFieldInfo f x, DemoteFieldInfos fs xs) => DemoteFieldInfos (f ': fs) (x ': xs) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteFieldInfos :: proxy (f ': fs) -> NP FieldInfo (x ': xs) # | |
data ConstructorInfo #
Metadata for a single constructors (to be used promoted).
Since: 0.3.0.0
Constructors
| Constructor ConstructorName | Normal constructor |
| Infix ConstructorName Associativity Fixity | Infix constructor |
| Record ConstructorName [FieldInfo] | Record constructor |
Instances
| DemoteConstructorInfos ([] :: [ConstructorInfo]) ([] :: [[Type]]) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfos :: proxy [] -> NP ConstructorInfo0 [] # | |
| (DemoteConstructorInfo c xs, DemoteConstructorInfos cs xss) => DemoteConstructorInfos (c ': cs) (xs ': xss) # | |
Defined in Generics.SOP.Type.Metadata Methods demoteConstructorInfos :: proxy (c ': cs) -> NP ConstructorInfo (xs ': xss) # | |
data DatatypeInfo #
Metadata for a datatype (to be used promoted).
A type of kind contains meta-information about a datatype
that is not contained in its code. This information consists
primarily of the names of the datatype, its constructors, and possibly its
record selectors.DatatypeInfo
The constructor indicates whether the datatype has been declared using newtype
or not.
Since: 0.3.0.0
Constructors
| ADT ModuleName DatatypeName [ConstructorInfo] | Standard algebraic datatype |
| Newtype ModuleName DatatypeName ConstructorInfo | Newtype |
re-exports
data Associativity #
Datatype to represent the associativity of a constructor
Constructors
| LeftAssociative | |
| RightAssociative | |
| NotAssociative |