HORIZON HASKELLDocslts/ghc-10.0.xfc4e5982026-10-11Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · fc4e598 · 2026-10-11

Moduletemplate-haskell-2.25.0.0Haskell2010

Language.Haskell.TH.Quote

Template Haskell supports quasiquoting, which permits users to construct program fragments by directly writing concrete syntax. A quasiquoter is essentially a function with takes a string to a Template Haskell AST. This module defines the QuasiQuoter datatype, which specifies a quasiquoter q which can be invoked using the syntax [q| ... string to parse ... |] when the QuasiQuotes language extension is enabled, and some utility functions for manipulating quasiquoters. Nota bene: this package does not define any parsers, that is up to you.

  • 1 type
  • 6 values
datadata QuasiQuoter
#

The QuasiQuoter type, a value q of this type can be used in the syntax [q| ... string to parse ...|]. In fact, for convenience, a QuasiQuoter actually defines multiple quasiquoters to be used in different splice contexts. In the usual case of a QuasiQuoter that is only intended to be used in certain splice contexts, the unused fields should just fail. This is most easily accomplished using namedefaultQuasiQuoter or defaultQuasiQuoter.

This is exposed both from the template-haskell-quasiquoter and template-haskell packages. Consider importing it from the more stable template-haskell-quasiquoter if you don't need the full breadth of the template-haskell interface.

Constructors

quoteFile takes a QuasiQuoter and lifts it into one that read the data out of a file. For example, suppose asmq is an assembly-language quoter, so that you can write [asmq| ld r1, r2 |] as an expression. Then if you define asmq_f = quoteFile asmq, then the quote [asmq_f|foo.s|] will take input from file "foo.s" instead of the inline text

A QuasiQuoter that fails with a helpful error message in every context. It is intended to be modified to create a QuasiQuoter that fails in all inappropriate contexts.

For example, you could write

myPatQQ = (namedDefaultQuasiQuoter "myPatQQ")
  { quotePat = ... }

If myPatQQ is used in an expression context, the compiler will report that, naming myPatQQ.

See also defaultQuasiQuoter, which does not name the QuasiQuoter in the error message, and might therefore be more appropriate when the users of a particular QuasiQuoter tend to define local "synonyms" for it.

For backwards compatibility

3 declarations
valuedataToQa
  1. :: (Quote m, Data a)
  2. => Name -> k
  3. -> Lit -> m q
  4. -> k -> [m q] -> m q
  5. -> forall b. Data b => b -> Maybe (m q)
  6. -> a
  7. -> m q
#

dataToQa is an internal utility function for constructing generic conversion functions from types with Data instances to various quasi-quoting representations. See the source of dataToExpQ and dataToPatQ for two example usages: mkCon, mkLit and appQ are overloadable to account for different syntax for expressions and patterns; antiQ allows you to override type-specific cases, a common usage is just const Nothing, which results in no overloading.

valuedataToExpQ
  1. :: (Quote m, Data a)
  2. => forall b. Data b => b -> Maybe (m Exp)
  3. -> a
  4. -> m Exp
#

dataToExpQ converts a value to a Exp representation of the same value, in the SYB style. It is generalized to take a function override type-specific cases; see liftData for a more commonly used variant.

valuedataToPatQ
  1. :: (Quote m, Data a)
  2. => forall b. Data b => b -> Maybe (m Pat)
  3. -> a
  4. -> m Pat
#

dataToPatQ converts a value to a Pat representation of the same value, in the SYB style. It takes a function to handle type-specific cases, alternatively, pass const Nothing to get default behavior.