generics-sop-0.1.1.1: Generic Programming using True Sums of Products

Safe HaskellNone
LanguageHaskell2010

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

Documentation

data DatatypeInfo :: [[*]] -> * where Source

Metadata for a datatype.

A value of type DatatypeInfo c contains the information about a datatype that is not contained in Code c. This information consists primarily of the names of the datatype, its constructors, and possibly its record selectors.

The constructor indicates whether the datatype has been declared using newtype or not.

Instances

All * Eq (Map * [*] ConstructorInfo xs) => Eq (DatatypeInfo xs) 
(All * Eq (Map * [*] ConstructorInfo xs), All * Ord (Map * [*] ConstructorInfo xs)) => Ord (DatatypeInfo xs) 
All * Show (Map * [*] ConstructorInfo xs) => Show (DatatypeInfo xs) 

data ConstructorInfo :: [*] -> * where Source

Metadata for a single constructors.

This is indexed by the product structure of the constructor components.

Instances

All * Eq (Map * * FieldInfo xs) => Eq (ConstructorInfo xs) 
(All * Eq (Map * * FieldInfo xs), All * Ord (Map * * FieldInfo xs)) => Ord (ConstructorInfo xs) 
All * Show (Map * * FieldInfo xs) => Show (ConstructorInfo xs) 

data FieldInfo :: * -> * where Source

For records, this functor maps the component to its selector name.

Constructors

FieldInfo :: FieldName -> FieldInfo a 

Instances

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.

type FieldName = String Source

The name of a field / record selector.

type Fixity = Int Source

The fixity of an infix constructor.

re-exports

data Associativity :: *

Datatype to represent the associativity of a constructor

Instances

Eq Associativity 
Ord Associativity 
Read Associativity 
Show Associativity 
Generic Associativity 
type Rep Associativity = D1 D1Associativity ((:+:) (C1 C1_0Associativity U1) ((:+:) (C1 C1_1Associativity U1) (C1 C1_2Associativity U1)))