th-abstraction
Nicer interface for reified information about data types
https://github.com/glguy/th-abstraction
| Version on this page: | 0.3.2.0 | 
| LTS Haskell 24.18: | 0.7.1.0@rev:1 | 
| Stackage Nightly 2025-11-03: | 0.7.1.0@rev:1 | 
| Latest on Hackage: | 0.7.1.0@rev:1 | 
th-abstraction-0.3.2.0@sha256:9b5b4e6e2bbff9b075ad7751ee98e2107090bd17b51d5442695b8990e4db6521,1851Module documentation for 0.3.2.0
- Language
- Language.Haskell
- Language.Haskell.TH
 
 
 - Language.Haskell
 
th-abstraction
This package provides a consistent interface to a subset of Template Haskell.
Currently the package provides a consistent view of the reified declaration information about datatypes, newtypes, and data family instances. These interfaces abstract away the differences in the normal and GADT syntax used to define these types.
Contact Information
Please contact me via GitHub or on the #haskell IRC channel on irc.freenode.net
Changes
Revision history for th-abstraction
0.3.2.0 – 2020-02-06
- Support substituting into and extracting free variables from 
ForallVisTs ontemplate-haskell-2.16.0.0(GHC 8.10) or later. - Fix a bug in which 
freeVariablescould report duplicate kind variables when they occur in the kinds of the type variable binders in aForallT. - Fix a bug in which 
resolveInfixTwould not resolveUInfixTs occurring in the kinds of type variable binders in aForallT. - Fix a bug in which the 
TypeSubstitution ConstructorInfoinstance would not detect free kind variables in theconstructorVars. 
0.3.1.0 – 2019-04-28
- Fix a bug which would cause data family information to be reified incorrectly with GHC 8.8+ in some situations.
 
0.3.0.0 – 2019-04-26
- 
Breaking change: the
datatypeVarsfield ofDatatypeInfois now of type[TyVarBndr]instead of[Type], as it now refers to all of the bound type variables in the data type. The olddatatypeVarsfield has been renamed todatatypeInstTypesto better reflect its purpose.In addition, the type of
normalizeConnow has an additional[TyVarBndr]argument, sinceDatatypeInfonow requires it. - 
Support
template-haskell-2.15. - 
Fix a bug in which
normalizeDecwould not detect existential type variables in a GADT constructor if they were implicitly quantified. - 
Fix a bug in which
normalizeDecwould report an incorrect number ofdatatypeVarsfor GADT declarations with explicit return kinds (such asdata Foo :: * -> * where). 
0.2.11.0 – 2019-02-26
- Fix a bug in which 
freeVariablesWellScopedwould sometimes not preserve the left-to-right ordering ofNames generated withnewName. 
0.2.10.0 – 2018-12-20
- Optimization: 
quantifyTypenow collapses consecutiveforalls. For instance, callingquantifyTypeonforall b. a -> b -> T anow producesforall a b. a -> b -> T ainstead offorall a. forall b. a -> b -> T a. 
0.2.9.0 – 2018-12-20
- Fix a bug in which 
resolveTypeSynonymswould not look intoForallTs,SigTs,InfixTs, orParensTs. - Fix a bug in which 
quantifyTypewould not respect the dependency order of type variables (e.g.,Proxy (a :: k)would have erroneously been quantified asforall a k. Proxy (a :: k)). - Fix a bug in which 
asEqualPredwould return incorrect results with GHC 8.7. - Add a 
freeVariablesWellScopedfunction which computes the free variables of a list of types and sorts them according to dependency order. - Add a 
resolveKindSynonymsfunction which expands all type synonyms in aKind. This is mostly useful for supporting old GHCs whereTypeandKindwere not the same. 
0.2.8.0 – 2018-06-29
- GADT reification is now much more robust with respect to 
PolyKinds:- 
A bug in which universally quantified kind variables were mistakenly flagged as existential has been fixed.
 - 
A bug in which the kinds of existentially quantified type variables were not substituted properly has been fixed.
 - 
More kind equalities are detected than before. For example, in the following data type:
data T (a :: k) where MkT :: forall (a :: Bool). T aWe now catch the
k ~ Boolequality. 
 - 
 - Tweak 
resolveTypeSynonymsso that failing to reify a type constructor name so longer results in an error. Among other benefits, this makes it possible to pass data types with GADT syntax tonormalizeDec. 
0.2.7.0 – 2018-06-17
- Fix bug in which data family instances with duplicate occurrences of type variables in the left-hand side would have redundant equality constraints in their contexts.
 
0.2.6.0 – 2017-09-04
- Fix bug in which 
applySubstitutionandfreeVariableswould ignore type variables in the kinds of type variable binders. 
0.2.5.0
- Added 
pragLineDCompat,newtypeDCompatandtySynInstDCompat 
0.2.4.0 – 2017-07-31
- Fix bug that caused GADT equality constraints to be incorrect in some cases.
 - Expose 
UnpackednessandStrictness(which were unexported by accident). 
0.2.3.0 – 2017-06-26
- Add 
resolvePredSynonyms - Add 
reifyConstructor, which allows reification ofConstructorInfofrom a constructor name, andlookupByConstructorName, which allows directly looking up aConstructorInfofrom aDatatypeInfovalue for a given constructorName. - Augment 
reifyDatatypeto be able to look upDatatypeInfofrom theNameof a record selector for one of its constructors. Also addreifyRecordfor reification of ofConstructorInfofrom a record name, andlookupByRecordName, which allows directly looking up aConstructorInfofrom aDatatypeInfovalue for a given recordName. - Fix bug that caused 
th-abstractionto fail on GHC 7.0 and 7.2 when passing a vanilla constructor name toreifyDatatype - Make 
normalizeDecandnormalizeConmore robust with respect to data family instances on GHC 7.6 and 7.8 
0.2.2.0 – 2017-06-10
- Fix 
freeVariableson lists not not produce duplicates. 
0.2.1.0 – 2017-06-09
- Add sensible reify defaults and error messages when we can’t backport fixes to old GHC Template Haskell output due to hand-written Decs being processed.
 
0.2.0.0 – 2017-06-03
- Added 
reifyFixityCompat - Added 
constructorStrictnessfield toConstructorInfo - Infer more kind signatures when missing on old GHCs
 - Added parameter to 
normalizeCon - Support GHC back to 7.0.4
 
0.1.3.0 – 2017-05-27
- Added 
resolveInfixTwhich uses reified fixity information to resolveUInfixT - Added 
asEqualPredandasClassPred - Fixed data-instance GADTs
 
0.1.2.1 – 2017-05-21
- Add eta reduction fixes to GHC 7.6
 
0.1.2.0 – 2017-05-21
- Added 
arrowKCompat - Added workaround for GHC 7.8 data instance eta reduction bug
 - Added kind signatures to datatypeVars
 
0.1.1.0 – 2017-05-20
- Better matching of constraints generated for GADTs across GHC versions
 - Added 
dataDCompat - Support for giving value constructors to reifyDatatype. This enables data families to be reified easily.
 
0.1.0.0 – 2017-04-26
- First version.
 
