template-haskell
Support library for Template Haskell
Version on this page: | 2.22.0.0 |
LTS Haskell 23.1: | 2.21.0.0 |
Stackage Nightly 2024-12-22: | 2.22.0.0 |
Latest on Hackage: | 2.23.0.0 |
template-haskell-2.22.0.0@sha256:463e87c76794859c861c95517329483282af8b079c02084755cc4bd1ae41d5ae,2151
Module documentation for 2.22.0.0
This package provides modules containing facilities for manipulating Haskell source code using Template Haskell.
See http://www.haskell.org/haskellwiki/Template_Haskell for more information.
Changes
Changelog for template-haskell
package
2.22.0.0
-
The kind of
Code
was changed fromforall r. (Type -> Type) -> TYPE r -> Type
to(Type -> Type) -> forall r. TYPE r -> Type
. This enables higher-kinded usage. -
Extend
Pat
withTypeP
andExp
withTypeE
, introduce functionstypeP
andtypeE
(GHC Proposal #281). -
Extend
Pragma
withSCCP
. -
Extend
Pat
withInvisP
, introduce functioninvisP
. (Ghc Proposal #448). -
Add a new data type
NamespaceSpecifier
to representtype
/data
namespace specifiers, which can be used in conjunction with theExplicitNamespaces
extension:-
The
InfixD
constructor of theDec
data type now stores aNamespaceSpecifier
. -
Add
infixLWithSpecD
,infixRWithSpecD
andinfixNWithSpecD
functions, which accept aNamespaceSpecifier
as an argument.
-
2.21.0.0
-
Record fields now belong to separate
NameSpace
s, keyed by the parent of the record field. This is the name of the first constructor of the parent type, even if this constructor does not have the field in question.This change enables TemplateHaskell support for
DuplicateRecordFields
. -
Add support for generating typed splices and brackets in untyped Template Haskell Introduces
typedSpliceE :: Quote m => m Exp -> m Exp
andtypedBracketE :: Quote m => m Exp -> m Exp
-
Add
BndrVis
to support invisible binders in type declarations (GHC Proposal #425). -
The binder flag type in
plainTV
andkindedTV
is generalized from()
to any data type with aDefaultBndrFlag
instance, including()
,Specificity
, andBndrVis
.
2.20.0.0
-
The
Ppr.pprInfixT
function has gained aPrecedence
argument. -
The values of named precedence levels like
Ppr.appPrec
have changed. -
Add
TypeDataD
constructor to theDec
type fortype data
declarations (GHC proposal #106). -
Add
instance Lift (Fixed a)
2.19.0.0
-
Add
DefaultD
constructor to support Haskelldefault
declarations. -
Add support for Overloaded Record Dot. Introduces
getFieldE :: Quote m => m Exp -> String -> m Exp
andprojectionE :: Quote m => [String] -> m Exp
. -
Add
instance Lift ByteArray
. -
Add
PromotedInfixT
andPromotedUInfixT
, which are analogs toInfixT
andUInfixT
that ensure that if a dynamically bound name (i.e. a name withNameFlavour
NameS
orNameQ
; the flavours produced bymkName
) is used as operator, it will be bound to a promoted data constructor rather than a type constructor, if both are in scope. -
Add a
vendor-filepath
Cabal flag to thetemplate-haskell
package. If this flag is set thentemplate-haskell
will not depend on thefilepath
package and will instead use some modules fromfilepath
that have been copied into thetemplate-haskell
source tree.
2.18.0.0
-
The types of
ConP
andconP
have been changed to allow for an additional list of type applications preceding the argument patterns. -
Add support for the
Char
kind (#11342): we extend theTyLit
data type with the constructorCharTyLit
that reflects type-level characters. -
Add
putDoc
andgetDoc
which allow Haddock documentation to be attached to module headers, declarations, function arguments and instances, as well as queried. These are quite low level operations, so for convenience there are several combinators that can be used withDec
s directly, includingwithDecDoc
/withDecsDoc
as well as_doc
counterparts to many of theDec
helper functions. -
Add
newDeclarationGroup
to document the effect of visibility while reifying types and instances.
2.17.0.0
-
Typed Quotations now return a value of type
Code m a
(GHC Proposal #195). The main motiviation is to make writing instances easier and make it easier to storeCode
values in type-indexed maps. -
Implement Overloaded Quotations (GHC Proposal #246). This patch modifies a few fundamental things in the API. All the library combinators are generalised to be in terms of a new minimal class
Quote
. The types oflift
,liftTyped
, andliftData
are modified to returnm Exp
rather thanQ Exp
. Instances written in terms ofQ
are now disallowed. The types ofunsafeTExpCoerce
andunTypeQ
are also generalised in terms ofQuote
rather than specific toQ
. -
Implement Explicit specificity in type variable binders (GHC Proposal #99). In
Language.Haskell.TH.Syntax
,TyVarBndr
is now annotated with aflag
, denoting the additional argument to its constructorsPlainTV
andKindedTV
.flag
is either theSpecificity
of the type variable (SpecifiedSpec
orInferredSpec
) or()
. -
Fix Eq/Ord instances for
Bytes
: we were comparing pointers while we should compare the actual bytes (#16457). -
Fix Show instance for
Bytes
: we were showing the pointer value while we want to show the contents (#16457). -
Add
Semigroup
andMonoid
instances forQ
(#18123). -
Add
MonadFix
instance forQ
(#12073). -
Add support for QualifiedDo. The data constructors
DoE
andMDoE
got a newMaybe ModName
argument to describe the qualifier of do blocks. -
The argument to
TExpQ
can now be levity polymorphic.
2.16.0.0 Jan 2020
-
Bundled with GHC 8.10.1
-
Add support for tuple sections. (#15843) The type signatures of
TupE
andUnboxedTupE
have changed from[Exp] -> Exp
to[Maybe Exp] -> Exp
. The type signatures oftupE
andunboxedTupE
remain the same for backwards compatibility. -
Introduce a
liftTyped
method to theLift
class and set the default implementations oflift
in terms ofliftTyped
. -
Add a
ForallVisT
constructor toType
to represent visible, dependent quantification. -
Introduce support for
Bytes
literals (raw bytes embedded into the output binary) -
Make the
Lift
typeclass levity-polymorphic and add instances for unboxed tuples, unboxed sums,Int#
,Word#
,Addr#
,Float#
, andDouble#
. -
Introduce
reifyType
to reify the type or kind of a thing referenced byName
.
2.15.0.0 May 2019
-
Bundled with GHC 8.8.1
-
In
Language.Haskell.TH.Syntax
,DataInstD
,NewTypeInstD
,TySynEqn
, andRuleP
now all have aMaybe [TyVarBndr]
argument, which contains a list of quantified type variables if an explicitforall
is present, andNothing
otherwise.DataInstD
,NewTypeInstD
,TySynEqn
also now use a singleType
argument to represent the left-hand-side to avoid malformed type family equations and allow visible kind application.Correspondingly, in
Language.Haskell.TH.Lib.Internal
,pragRuleD
,dataInstD
,newtypeInstD
, andtySynEqn
now all have aMaybe [TyVarBndrQ]
argument. Non-API-breaking versions of these functions can be found inLanguage.Haskell.TH.Lib
. The type signature oftySynEqn
has also changed from[TypeQ] -> TypeQ -> TySynEqnQ
to(Maybe [TyVarBndrQ]) -> TypeQ -> TypeQ -> TySynEqnQ
, for the same reason as inLanguage.Haskell.TH.Syntax
above. Consequently,tySynInstD
also changes fromName -> TySynEqnQ -> DecQ
toTySynEqnQ -> DecQ
. -
Add
Lift
instances forNonEmpty
andVoid
-
addForeignFilePath
now support assembler sources (#16180).
2.14.0.0 September 2018
-
Bundled with GHC 8.6.1
-
Introduce an
addForeignFilePath
function, as well as a correspondingqAddForeignFile
class method toQuasi
. UnlikeaddForeignFile
, which takes the contents of the file as an argument,addForeignFilePath
takes as an argument a path pointing to a foreign file. A newaddForeignSource
function has also been added which takes a file’s contents as an argument.The old
addForeignFile
function is now deprecated in favor ofaddForeignSource
, and theqAddForeignFile
method ofQuasi
has been removed entirely. -
Introduce an
addTempFile
function, as well as a correspondingqAddTempFile
method toQuasi
, which requests a temporary file of a given suffix. -
Add a
ViaStrategy
constructor toDerivStrategy
. -
Add support for
-XImplicitParams
viaImplicitParamT
,ImplicitParamVarE
, andImplicitParamBindD
. -
Add support for
-XRecursiveDo
viaMDoE
andRecS
.
2.13.0.0 March 2018
-
Bundled with GHC 8.4.1
-
Language.Haskell.TH.FamFlavour
, which was deprecated in 2.11, has been removed. -
Add support for overloaded labels. Introduces
labelE :: String -> ExpQ
. -
Add
KindQ
,TyVarBndrQ
, andFamilyResultSigQ
aliases toLanguage.Haskell.TH.Lib
. -
Add
Language.Haskell.TH.Lib.Internal
module, which exposes some additional functionality that is used internally in GHC’s integration with Template Haskell. This is not a part of the public API, and as such, there are no API guarantees for this module from version to version. -
MonadIO
is now a superclass ofQuasi
,qRunIO
has a default implementationqRunIO = liftIO
-
Add
MonadIO Q
instance
2.12.0.0 July 2017
-
Bundled with GHC 8.2.1
-
Add support for pattern synonyms. This introduces one new constructor to
Info
(PatSynI
), two new constructors toDec
(PatSynD
andPatSynSigD
), and two new data types (PatSynDir
andPatSynArgs
), among other changes. (#8761) -
Add support for unboxed sums. (#12478)
-
Add support for visible type applications. (#12530)
-
Add support for attaching deriving strategies to
deriving
statements (#10598) -
Add support for
COMPLETE
pragmas. (#13098) -
unboxedTupleTypeName
andunboxedTupleDataName
now work for unboxed 0-tuples and 1-tuples (#12977) -
Language.Haskell.TH
now reexports all ofLanguage.Haskell.TH.Lib
. (#12992). This causesLanguage.Haskell.TH
to export more types and functions that it did before:TExp
,BangQ
, andFieldExpQ
unboxedTupP
,unboxedTupE
andunboundVarE
infixLD
,infixRD
, andinfixND
unboxedTupleT
andwildCardT
plainTV
andkindedTV
interruptible
andfunDep
valueAnnotation
,typeAnnotation
, andmoduleAnnotation
-
Add support for overloaded labels.
2.11.0.0 May 2016
-
Bundled with GHC 8.0.1
-
The compiler can now resolve infix operator fixities in types on its own. The
UInfixT
constructor ofType
is analoguous toUInfixE
for expressions and can contain a tree of infix type applications which will be reassociated according to the fixities of the operators. TheParensT
constructor can be used to explicitly group expressions. -
Add
namePackage
andnameSpace
-
Make
dataToQa
anddataToExpQ
able to handleData
instances whosetoConstr
implementation relies on a function instead of a data constructor (#10796) -
Add
Show
instances forNameFlavour
andNameSpace
-
Remove
FamilyD
andFamFlavour
. AddDataFamilyD
andOpenTypeFamilyD
as the representation of data families and open type families respectively. (#6018) -
Add
TypeFamilyHead
for common elements ofOpenTypeFamilyD
andClosedTypeFamilyD
(#10902) -
The
Strict
datatype was split among different datatypes: three for writing the strictness information of data constructors’ fields as denoted in Haskell source code (SourceUnpackedness
andSourceStrictness
, as well asBang
), and one for strictness information after a constructor is compiled (DecidedStrictness
).Strict
,StrictType
andVarStrictType
have been deprecated in favor ofBang
,BangType
andVarBangType
. (#10697) -
Add
reifyConStrictness
to query a data constructor’sDecidedStrictness
values for its fields (#10697) -
The
ClassOpI
,DataConI
, andVarI
constructors no longer have aFixity
field. Instead, allFixity
information for a givenName
is now determined through thereifyFixity
function, which returnsJust
the fixity if there is an explicit fixity declaration for thatName
, andNothing
otherwise (#10704 and #11345) -
Add
MonadFail Q
instance for GHC 8.0 and later (#11661) -
Add support for OVERLAP(S/PED/PING) pragmas on instances
2.10.0.0 Mar 2015
- Bundled with GHC 7.10.1
- Remove build-dependency on
containers
package - Make
Pred
a type synonym ofType
, and deprecateclassP
/equalP
(#7021) - Add support for
LINE
pragma viaprageLineD
andLineP
- Replace
Int#
with!Int
inNameFlavour
constructors - Derive
Generic
for TH types (#9527) - Add
standaloneDerivD
(#8100) - Add support for generic default signatures via
defaultSigD
(#9064) - Add
Lift
instances for()
andRational
- Derive new
Show
andData
instances forLoc
- Derive
Eq
instances forLoc
,Info
, andModuleInfo
- Make calling conventions available in template haskell consistent with those from GHC (#9703)
- Add support for
-XStaticValues
viastaticE
- Add
Ord
instances to TH types - Merge some instances from
th-orphans
(Ppr
instances forLit
andLoc
as well asLift
instances for numeric types - Put parens around
(ty :: kind)
when pretty-printing TH syntax