haskell-src-exts-qq-0.7: A quasiquoter for haskell-src-exts.

Safe HaskellNone
LanguageHaskell2010

Language.Haskell.Exts.QQ

Description

This module defines quasiquoters for haskell-src-exts expressions and declarations.

Antiquotations steal the splice syntax of Template Haskell, so for example example x appears antiquoted in [$hs| $x ++ $(Hs.strE "bar") |]. Expressions appearing inside parenthesized splices are limited to concrete syntax expressible by Template Haskell's Exp data type.

Names in patterns can also be antiquoted, using double parentheses. For instance:

let x = Hs.name "n" in [hs| \ ((x)) -> $(Hs.Var (Hs.UnQual x)) + 1 |]

Alternatively, one can use the double underscore syntax, useful when antiquoting a function name as in the following:

let f = "incr"
    fE = Hs.Var $ Hs.UnQual $ Hs.name f
in [hs| let __f__ x = x + 1 in $fE 10 |]

The double parentheses syntax is also used for antiquoting types. For instance:

let typ = Hs.TyCon (Hs.UnQual $ Hs.name "Int")
in [hs| 1 :: ((typ)) |]

In a pattern context, antiquotations use the same syntax.

Synopsis

Documentation

hs :: QuasiQuoter Source

A quasiquoter for expressions. All Haskell extensions known by haskell-src-exts are activated by default.

dec :: QuasiQuoter Source

A quasiquoter for a single top-level declaration.

decs :: QuasiQuoter Source

A quasiquoter for multiple top-level declarations.

pat :: QuasiQuoter Source

A quasiquoter for patterns

ty :: QuasiQuoter Source

A quasiquoter for types. All Haskell extensions known by haskell-src-exts are activated by default.

hsWithMode :: ParseMode -> QuasiQuoter Source

Rather than importing the above quasiquoters, one can create custom quasiquoters with a customized ParseMode using this function.

hs = hsWithMode mode
dec = decWithMode mode
decs = decsWithMode mode