Moduleth-utilities-0.2.5.2Haskell2010
TH.ReifySimple
Utilities for reifying simplified datatype info. It omits details that aren't usually relevant to generating instances that work with the datatype. This makes it easier to use TH to derive instances.
The "Simple" in the module name refers to the simplicity of the datatypes, not the module itself, which exports quite a few things which are useful in some circumstance or another. I anticipate that the most common uses of this will be the following APIs:
Getting info about a
dataornewtypedeclaration, via DataType, reifyDataType, and DataCon. This is useful for writing something which generates declarations based on a datatype, one of the most common uses of Template Haskell.Getting nicely structured info about a named type. See TypeInfo and reifyType. This does not yet support reifying typeclasses, primitive type constructors, or type variables (TyVarI).
Currently, this module supports reifying simplified versions of the following Info constructors:
FamilyI becomes a DataFamily or TypeFamily value.
In the future it will hopefully also have support for the remaining Info constructors, ClassI, ClassOpI, PrimTyConI, VarI, and TyVarI.
- 7 types
- 15 values
- Packageth-utilities-0.2.5.2
- Exports22
- LanguageHaskell2010
- LicenceMIT
- SourceReifySimple.hs
Reifying simplified type info
5 declarationsReifies type info, but instead of yielding a LiftedDataConInfo,
will instead yield Nothing.
Reifying simplified info for specific declaration varieties
0 declarationsDatatype info
Simplified info about a DataD. Omits deriving, strictness,
kind info, and whether it's data or newtype.
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq DataTypeDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData DataTypeDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd DataTypeDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow DataTypeDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric DataTypeDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep DataType = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"DataType"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"DataType"
'PrefixI 'True) ((S1 ('MetaSel ('Just"dtName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Just"dtTvs"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name])) :*: (S1 ('MetaSel ('Just"dtCxt"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Cxt) :*: S1 ('MetaSel ('Just"dtCons"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DataCon]))))
Reify the given data or newtype declaration, and yields its DataType representation.
Data constructor info
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq DataConDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData DataConDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd DataConDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow DataConDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric DataConDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep DataCon = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"DataCon"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"DataCon"
'PrefixI 'True) ((S1 ('MetaSel ('Just"dcName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Just"dcTvs"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name])) :*: (S1 ('MetaSel ('Just"dcCxt"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Cxt) :*: S1 ('MetaSel ('Just"dcFields"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [(Maybe Name, Type)]))))
Reify the given data constructor.
Data family info
Simplified info about a data family. Omits deriving, strictness, and kind info.
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq DataFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData DataFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd DataFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow DataFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric DataFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep DataFamily = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"DataFamily"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"DataFamily"
'PrefixI 'True) (S1 ('MetaSel ('Just"dfName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: (S1 ('MetaSel ('Just"dfTvs"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name]) :*: S1 ('MetaSel ('Just"dfInsts"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DataInst]))))
Simplified info about a data family instance. Omits deriving, strictness, and kind info.
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq DataInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData DataInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd DataInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow DataInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric DataInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep DataInst = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"DataInst"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"DataInst"
'PrefixI 'True) ((S1 ('MetaSel ('Just"diName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: S1 ('MetaSel ('Just"diCxt"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Cxt)) :*: (S1 ('MetaSel ('Just"diParams"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Type]) :*: S1 ('MetaSel ('Just"diCons"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [DataCon]))))
Reify the given data family, and yield its DataFamily representation.
Type family info
Simplified info about a type family. Omits kind info and injectivity info.
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq TypeFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData TypeFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd TypeFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow TypeFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric TypeFamilyDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep TypeFamily = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"TypeFamily"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"TypeFamily"
'PrefixI 'True) (S1 ('MetaSel ('Just"tfName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: (S1 ('MetaSel ('Just"tfTvs"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Name]) :*: S1 ('MetaSel ('Just"tfInsts"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [TypeInst]))))
Simplified info about a type family instance. Omits nothing.
Instances6Eq, Data, Ord, Show, Generic, Rep
Eq TypeInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleData TypeInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleOrd TypeInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleShow TypeInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpleGeneric TypeInstDefined in th-utilities-0.2.5.2 · TH.ReifySimpletype Rep TypeInst = D1 ('MetaDataDefined in th-utilities-0.2.5.2 · TH.ReifySimple"TypeInst"
"TH.ReifySimple"
"th-utilities-0.2.5.2-9uSbPcf5Mzp1IRDix45AmF"
'False) (C1 ('MetaCons"TypeInst"
'PrefixI 'True) (S1 ('MetaSel ('Just"tiName"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Name) :*: (S1 ('MetaSel ('Just"tiParams"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [Type]) :*: S1 ('MetaSel ('Just"tiType"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Type))))
Reify the given type family instance declaration, and yields its TypeInst representation.
Other utilities
2 declarationsLike reifyDataType, but takes a Type instead of just the Name of the datatype. It expects a normal datatype argument (see typeToNamedCon).