Add support for LINE pragma in template-haskell
[ghc.git] / libraries / template-haskell / Language / Haskell / TH.hs
index 16ef073..76aae27 100644 (file)
--- The public face of Template Haskell
+{- | The public face of Template Haskell
 
+For other documentation, refer to:
+<http://www.haskell.org/haskellwiki/Template_Haskell>
+
+-}
 module Language.Haskell.TH(
-       -- The monad and its operations
-       Q, runQ, 
-       report,         -- :: Bool -> String -> Q ()
-       recover,        -- :: Q a -> Q a -> Q a
-       reify,          -- :: Name -> Q Info
-       currentModule,  -- :: Q String
-       runIO,          -- :: IO a -> Q a
-
-       -- Names
-       Name, 
-       mkName,         -- :: String -> Name
-       newName,        -- :: String -> Q Name
-       nameBase,       -- :: Name -> String
-       nameModule,     -- :: Name -> Maybe String
-       tupleTypeName, tupleDataName,   -- Int -> Name
-       
-       -- The algebraic data types
-       Dec(..), Exp(..), Con(..), Type(..), Cxt, Match(..), 
-       Clause(..), Body(..), Guard(..), Stmt(..), Range(..),
-       Lit(..), Pat(..), FieldExp, FieldPat, 
-       Strict(..), Foreign(..), Callconv(..), Safety(..), FunDep(..),
-       Info(..), 
-       Fixity(..), FixityDirection(..), defaultFixity, maxPrecedence,
-
-       -- Library functions
-       InfoQ, ExpQ, DecQ, ConQ, TypeQ, CxtQ, MatchQ, ClauseQ, BodyQ, GuardQ,
-       StmtQ, RangeQ, StrictTypeQ, VarStrictTypeQ, PatQ, FieldPatQ,
-       intPrimL, floatPrimL, doublePrimL, integerL, charL, stringL, rationalL, 
-       litP, varP, tupP, conP, infixP, tildeP, asP, wildP, recP, listP, sigP,
-       fieldPat,
-       bindS, letS, noBindS, parS, 
-       fromR, fromThenR, fromToR, fromThenToR, 
-       normalB, guardedB, normalG, normalGE, patG, patGE, match, clause, 
-       dyn, global, varE, conE, litE, appE, infixE, infixApp, sectionL, sectionR, 
-       lamE, lam1E, tupE, condE, letE, caseE, doE, compE, arithSeqE, appsE,
-       fromE, fromThenE, fromToE, fromThenToE,
-       listE, sigE, recConE, recUpdE, stringE, fieldExp,
-       valD, funD, tySynD, dataD, newtypeD, classD, instanceD, sigD, forImpD,
-       cxt, normalC, recC, infixC,
-       forallT, varT, conT, appT, arrowT, listT, tupleT,
-       isStrict, notStrict, strictType, varStrictType,
-       cCall, stdCall, unsafe, safe, threadsafe,
-
-       -- Pretty-printer
-       Ppr(..), pprint, pprExp, pprLit, pprPat, pprParendType
-       
+        -- * The monad and its operations
+        Q,
+        runQ,
+        -- ** Administration: errors, locations and IO
+        reportError,              -- :: String -> Q ()
+        reportWarning,            -- :: String -> Q ()
+        report,                   -- :: Bool -> String -> Q ()
+        recover,          -- :: Q a -> Q a -> Q a
+        location,         -- :: Q Loc
+        Loc(..),
+        runIO,            -- :: IO a -> Q a
+        -- ** Querying the compiler
+        -- *** Reify
+        reify,            -- :: Name -> Q Info
+        reifyModule,
+        thisModule,
+        Info(..), ModuleInfo(..),
+        InstanceDec,
+        ParentName,
+        Arity,
+        Unlifted,
+        -- *** Name lookup
+        lookupTypeName,  -- :: String -> Q (Maybe Name)
+        lookupValueName, -- :: String -> Q (Maybe Name)
+        -- *** Instance lookup
+        reifyInstances,
+        isInstance,
+        -- *** Roles lookup
+        reifyRoles,
+        -- *** Annotation lookup
+        reifyAnnotations, AnnLookup(..),
+
+        -- * Typed expressions
+        TExp, unType,
+
+        -- * Names
+        Name, NameSpace,       -- Abstract
+        -- ** Constructing names
+        mkName,         -- :: String -> Name
+        newName,        -- :: String -> Q Name
+        -- ** Deconstructing names
+        nameBase,      -- :: Name -> String
+        nameModule,    -- :: Name -> Maybe String
+        -- ** Built-in names
+        tupleTypeName, tupleDataName,  -- Int -> Name
+        unboxedTupleTypeName, unboxedTupleDataName, -- :: Int -> Name
+
+    -- * The algebraic data types
+    -- | The lowercase versions (/syntax operators/) of these constructors are
+    -- preferred to these constructors, since they compose better with
+    -- quotations (@[| |]@) and splices (@$( ... )@)
+
+    -- ** Declarations
+        Dec(..), Con(..), Clause(..),
+        Strict(..), Foreign(..), Callconv(..), Safety(..), Pragma(..),
+        Inline(..), RuleMatch(..), Phases(..), RuleBndr(..), AnnTarget(..),
+        FunDep(..), FamFlavour(..), TySynEqn(..),
+        Fixity(..), FixityDirection(..), defaultFixity, maxPrecedence,
+    -- ** Expressions
+        Exp(..), Match(..), Body(..), Guard(..), Stmt(..), Range(..), Lit(..),
+    -- ** Patterns
+        Pat(..), FieldExp, FieldPat,
+    -- ** Types
+        Type(..), TyVarBndr(..), TyLit(..), Kind, Cxt, Pred, Syntax.Role(..),
+
+    -- * Library functions
+    -- ** Abbreviations
+        InfoQ, ExpQ, DecQ, DecsQ, ConQ, TypeQ, TyLitQ, CxtQ, PredQ, MatchQ, ClauseQ,
+        BodyQ, GuardQ, StmtQ, RangeQ, StrictTypeQ, VarStrictTypeQ, PatQ, FieldPatQ,
+        RuleBndrQ, TySynEqnQ,
+
+    -- ** Constructors lifted to 'Q'
+    -- *** Literals
+        intPrimL, wordPrimL, floatPrimL, doublePrimL, integerL, rationalL,
+        charL, stringL, stringPrimL,
+    -- *** Patterns
+        litP, varP, tupP, conP, uInfixP, parensP, infixP,
+        tildeP, bangP, asP, wildP, recP,
+        listP, sigP, viewP,
+        fieldPat,
+
+    -- *** Pattern Guards
+        normalB, guardedB, normalG, normalGE, patG, patGE, match, clause,
+
+    -- *** Expressions
+        dyn, global, varE, conE, litE, appE, uInfixE, parensE,
+        infixE, infixApp, sectionL, sectionR,
+        lamE, lam1E, lamCaseE, tupE, condE, multiIfE, letE, caseE, appsE,
+        listE, sigE, recConE, recUpdE, stringE, fieldExp,
+    -- **** Ranges
+    fromE, fromThenE, fromToE, fromThenToE,
+
+    -- ***** Ranges with more indirection
+    arithSeqE,
+    fromR, fromThenR, fromToR, fromThenToR,
+    -- **** Statements
+    doE, compE,
+    bindS, letS, noBindS, parS,
+
+    -- *** Types
+        forallT, varT, conT, appT, arrowT, equalityT, listT, tupleT, sigT, litT,
+    promotedT, promotedTupleT, promotedNilT, promotedConsT,
+    -- **** Type literals
+    numTyLit, strTyLit,
+    -- **** Strictness
+        isStrict, notStrict, strictType, varStrictType,
+    -- **** Class Contexts
+    cxt, classP, equalP, normalC, recC, infixC, forallC,
+
+    -- *** Kinds
+    varK, conK, tupleK, arrowK, listK, appK, starK, constraintK,
+
+    -- *** Roles
+    nominalR, representationalR, phantomR, inferR,
+
+    -- *** Top Level Declarations
+    -- **** Data
+        valD, funD, tySynD, dataD, newtypeD,
+    -- **** Class
+    classD, instanceD, sigD,
+    -- **** Role annotations
+    roleAnnotD,
+    -- **** Type Family / Data Family
+    familyNoKindD, familyKindD, dataInstD,
+    closedTypeFamilyNoKindD, closedTypeFamilyKindD,
+    newtypeInstD, tySynInstD,
+    typeFam, dataFam, tySynEqn,
+    -- **** Foreign Function Interface (FFI)
+    cCall, stdCall, unsafe, safe, forImpD,
+    -- **** Pragmas
+    ruleVar, typedRuleVar,
+    pragInlD, pragSpecD, pragSpecInlD, pragSpecInstD, pragRuleD, pragAnnD,
+    pragLineD,
+
+        -- * Pretty-printer
+    Ppr(..), pprint, pprExp, pprLit, pprPat, pprParendType
+
    ) where
 
-import Language.Haskell.TH.Syntax
+import Language.Haskell.TH.Syntax as Syntax
 import Language.Haskell.TH.Lib
 import Language.Haskell.TH.Ppr
-