+
+
+
+-- %************************************************************************
+-- %* *
+-- The known-key names for Template Haskell
+-- %* *
+-- %************************************************************************
+
+-- To add a name, do three things
+--
+-- 1) Allocate a key
+-- 2) Make a "Name"
+-- 3) Add the name to knownKeyNames
+
+templateHaskellNames :: NameSet
+-- The names that are implicitly mentioned by ``bracket''
+-- Should stay in sync with the import list of DsMeta
+
+templateHaskellNames = mkNameSet [
+ returnQName, bindQName, sequenceQName, gensymName, liftName,
+ -- Lit
+ charLName, stringLName, integerLName, intPrimLName,
+ floatPrimLName, doublePrimLName, rationalLName,
+ -- Pat
+ litPName, varPName, tupPName, conPName, tildePName,
+ asPName, wildPName, recPName, listPName,
+ -- FieldPat
+ fieldPatName,
+ -- Match
+ matchName,
+ -- Clause
+ clauseName,
+ -- Exp
+ varEName, conEName, litEName, appEName, infixEName,
+ infixAppName, sectionLName, sectionRName, lamEName, tupEName,
+ condEName, letEName, caseEName, doEName, compEName,
+ fromEName, fromThenEName, fromToEName, fromThenToEName,
+ listEName, sigEName, recConEName, recUpdEName,
+ -- FieldExp
+ fieldExpName,
+ -- Body
+ guardedBName, normalBName,
+ -- Stmt
+ bindSName, letSName, noBindSName, parSName,
+ -- Dec
+ funDName, valDName, dataDName, newtypeDName, tySynDName,
+ classDName, instanceDName, sigDName,
+ -- Cxt
+ cxtName,
+ -- Strict
+ isStrictName, notStrictName,
+ -- Con
+ normalCName, recCName, infixCName,
+ -- StrictType
+ strictTypeName,
+ -- VarStrictType
+ varStrictTypeName,
+ -- Type
+ forallTName, varTName, conTName, appTName,
+ tupleTName, arrowTName, listTName,
+
+ -- And the tycons
+ qTyConName, patTyConName, fieldPatTyConName, matchQTyConName,
+ clauseQTyConName, expQTyConName, fieldExpTyConName, stmtQTyConName,
+ decQTyConName, conQTyConName, strictTypeQTyConName,
+ varStrictTypeQTyConName, typeQTyConName, expTyConName, decTyConName,
+ typeTyConName, matchTyConName, clauseTyConName]
+
+varQual = mk_known_key_name OccName.varName
+tcQual = mk_known_key_name OccName.tcName
+
+thModule :: Module
+-- NB: the THSyntax module comes from the "haskell-src" package
+thModule = mkThPkgModule mETA_META_Name
+
+mk_known_key_name space str uniq
+ = mkKnownKeyExternalName thModule (mkOccFS space str) uniq
+
+returnQName = varQual FSLIT("returnQ") returnQIdKey
+bindQName = varQual FSLIT("bindQ") bindQIdKey
+sequenceQName = varQual FSLIT("sequenceQ") sequenceQIdKey
+gensymName = varQual FSLIT("gensym") gensymIdKey
+liftName = varQual FSLIT("lift") liftIdKey
+
+-- data Lit = ...
+charLName = varQual FSLIT("charL") charLIdKey
+stringLName = varQual FSLIT("stringL") stringLIdKey
+integerLName = varQual FSLIT("integerL") integerLIdKey
+intPrimLName = varQual FSLIT("intPrimL") intPrimLIdKey
+floatPrimLName = varQual FSLIT("floatPrimL") floatPrimLIdKey
+doublePrimLName = varQual FSLIT("doublePrimL") doublePrimLIdKey
+rationalLName = varQual FSLIT("rationalL") rationalLIdKey
+
+-- data Pat = ...
+litPName = varQual FSLIT("litP") litPIdKey
+varPName = varQual FSLIT("varP") varPIdKey
+tupPName = varQual FSLIT("tupP") tupPIdKey
+conPName = varQual FSLIT("conP") conPIdKey
+tildePName = varQual FSLIT("tildeP") tildePIdKey
+asPName = varQual FSLIT("asP") asPIdKey
+wildPName = varQual FSLIT("wildP") wildPIdKey
+recPName = varQual FSLIT("recP") recPIdKey
+listPName = varQual FSLIT("listP") listPIdKey
+
+-- type FieldPat = ...
+fieldPatName = varQual FSLIT("fieldPat") fieldPatIdKey
+
+-- data Match = ...
+matchName = varQual FSLIT("match") matchIdKey
+
+-- data Clause = ...
+clauseName = varQual FSLIT("clause") clauseIdKey
+
+-- data Exp = ...
+varEName = varQual FSLIT("varE") varEIdKey
+conEName = varQual FSLIT("conE") conEIdKey
+litEName = varQual FSLIT("litE") litEIdKey
+appEName = varQual FSLIT("appE") appEIdKey
+infixEName = varQual FSLIT("infixE") infixEIdKey
+infixAppName = varQual FSLIT("infixApp") infixAppIdKey
+sectionLName = varQual FSLIT("sectionL") sectionLIdKey
+sectionRName = varQual FSLIT("sectionR") sectionRIdKey
+lamEName = varQual FSLIT("lamE") lamEIdKey
+tupEName = varQual FSLIT("tupE") tupEIdKey
+condEName = varQual FSLIT("condE") condEIdKey
+letEName = varQual FSLIT("letE") letEIdKey
+caseEName = varQual FSLIT("caseE") caseEIdKey
+doEName = varQual FSLIT("doE") doEIdKey
+compEName = varQual FSLIT("compE") compEIdKey
+-- ArithSeq skips a level
+fromEName = varQual FSLIT("fromE") fromEIdKey
+fromThenEName = varQual FSLIT("fromThenE") fromThenEIdKey
+fromToEName = varQual FSLIT("fromToE") fromToEIdKey
+fromThenToEName = varQual FSLIT("fromThenToE") fromThenToEIdKey
+-- end ArithSeq
+listEName = varQual FSLIT("listE") listEIdKey
+sigEName = varQual FSLIT("sigE") sigEIdKey
+recConEName = varQual FSLIT("recConE") recConEIdKey
+recUpdEName = varQual FSLIT("recUpdE") recUpdEIdKey
+
+-- type FieldExp = ...
+fieldExpName = varQual FSLIT("fieldExp") fieldExpIdKey
+
+-- data Body = ...
+guardedBName = varQual FSLIT("guardedB") guardedBIdKey
+normalBName = varQual FSLIT("normalB") normalBIdKey
+
+-- data Stmt = ...
+bindSName = varQual FSLIT("bindS") bindSIdKey
+letSName = varQual FSLIT("letS") letSIdKey
+noBindSName = varQual FSLIT("noBindS") noBindSIdKey
+parSName = varQual FSLIT("parS") parSIdKey
+
+-- data Dec = ...
+funDName = varQual FSLIT("funD") funDIdKey
+valDName = varQual FSLIT("valD") valDIdKey
+dataDName = varQual FSLIT("dataD") dataDIdKey
+newtypeDName = varQual FSLIT("newtypeD") newtypeDIdKey
+tySynDName = varQual FSLIT("tySynD") tySynDIdKey
+classDName = varQual FSLIT("classD") classDIdKey
+instanceDName = varQual FSLIT("instanceD") instanceDIdKey
+sigDName = varQual FSLIT("sigD") sigDIdKey
+
+-- type Ctxt = ...
+cxtName = varQual FSLIT("cxt") cxtIdKey
+
+-- data Strict = ...
+isStrictName = varQual FSLIT("isStrict") isStrictKey
+notStrictName = varQual FSLIT("notStrict") notStrictKey
+
+-- data Con = ...
+normalCName = varQual FSLIT("normalC") normalCIdKey
+recCName = varQual FSLIT("recC") recCIdKey
+infixCName = varQual FSLIT("infixC") infixCIdKey
+
+-- type StrictType = ...
+strictTypeName = varQual FSLIT("strictType") strictTKey
+
+-- type VarStrictType = ...
+varStrictTypeName = varQual FSLIT("varStrictType") varStrictTKey
+
+-- data Type = ...
+forallTName = varQual FSLIT("forallT") forallTIdKey
+varTName = varQual FSLIT("varT") varTIdKey
+conTName = varQual FSLIT("conT") conTIdKey
+tupleTName = varQual FSLIT("tupleT") tupleTIdKey
+arrowTName = varQual FSLIT("arrowT") arrowTIdKey
+listTName = varQual FSLIT("listT") listTIdKey
+appTName = varQual FSLIT("appT") appTIdKey
+
+qTyConName = tcQual FSLIT("Q") qTyConKey
+patTyConName = tcQual FSLIT("Pat") patTyConKey
+fieldPatTyConName = tcQual FSLIT("FieldPat") fieldPatTyConKey
+matchQTyConName = tcQual FSLIT("MatchQ") matchQTyConKey
+clauseQTyConName = tcQual FSLIT("ClauseQ") clauseQTyConKey
+expQTyConName = tcQual FSLIT("ExpQ") expQTyConKey
+fieldExpTyConName = tcQual FSLIT("FieldExp") fieldExpTyConKey
+stmtQTyConName = tcQual FSLIT("StmtQ") stmtQTyConKey
+decQTyConName = tcQual FSLIT("DecQ") decQTyConKey
+conQTyConName = tcQual FSLIT("ConQ") conQTyConKey
+strictTypeQTyConName = tcQual FSLIT("StrictTypeQ") strictTypeQTyConKey
+varStrictTypeQTyConName = tcQual FSLIT("VarStrictTypeQ") varStrictTypeQTyConKey
+typeQTyConName = tcQual FSLIT("TypeQ") typeQTyConKey
+
+expTyConName = tcQual FSLIT("Exp") expTyConKey
+decTyConName = tcQual FSLIT("Dec") decTyConKey
+typeTyConName = tcQual FSLIT("Type") typeTyConKey
+matchTyConName = tcQual FSLIT("Match") matchTyConKey
+clauseTyConName = tcQual FSLIT("Clause") clauseTyConKey
+
+-- TyConUniques available: 100-119
+-- Check in PrelNames if you want to change this
+
+expTyConKey = mkPreludeTyConUnique 100
+matchTyConKey = mkPreludeTyConUnique 101
+clauseTyConKey = mkPreludeTyConUnique 102
+qTyConKey = mkPreludeTyConUnique 103
+expQTyConKey = mkPreludeTyConUnique 104
+decQTyConKey = mkPreludeTyConUnique 105
+patTyConKey = mkPreludeTyConUnique 106
+matchQTyConKey = mkPreludeTyConUnique 107
+clauseQTyConKey = mkPreludeTyConUnique 108
+stmtQTyConKey = mkPreludeTyConUnique 109
+conQTyConKey = mkPreludeTyConUnique 110
+typeQTyConKey = mkPreludeTyConUnique 111
+typeTyConKey = mkPreludeTyConUnique 112
+decTyConKey = mkPreludeTyConUnique 113
+varStrictTypeQTyConKey = mkPreludeTyConUnique 114
+strictTypeQTyConKey = mkPreludeTyConUnique 115
+fieldExpTyConKey = mkPreludeTyConUnique 116
+fieldPatTyConKey = mkPreludeTyConUnique 117
+
+-- IdUniques available: 200-299
+-- If you want to change this, make sure you check in PrelNames
+
+returnQIdKey = mkPreludeMiscIdUnique 200
+bindQIdKey = mkPreludeMiscIdUnique 201
+sequenceQIdKey = mkPreludeMiscIdUnique 202
+gensymIdKey = mkPreludeMiscIdUnique 203
+liftIdKey = mkPreludeMiscIdUnique 204
+
+-- data Lit = ...
+charLIdKey = mkPreludeMiscIdUnique 210
+stringLIdKey = mkPreludeMiscIdUnique 211
+integerLIdKey = mkPreludeMiscIdUnique 212
+intPrimLIdKey = mkPreludeMiscIdUnique 213
+floatPrimLIdKey = mkPreludeMiscIdUnique 214
+doublePrimLIdKey = mkPreludeMiscIdUnique 215
+rationalLIdKey = mkPreludeMiscIdUnique 216
+
+-- data Pat = ...
+litPIdKey = mkPreludeMiscIdUnique 220
+varPIdKey = mkPreludeMiscIdUnique 221
+tupPIdKey = mkPreludeMiscIdUnique 222
+conPIdKey = mkPreludeMiscIdUnique 223
+tildePIdKey = mkPreludeMiscIdUnique 224
+asPIdKey = mkPreludeMiscIdUnique 225
+wildPIdKey = mkPreludeMiscIdUnique 226
+recPIdKey = mkPreludeMiscIdUnique 227
+listPIdKey = mkPreludeMiscIdUnique 228
+
+-- type FieldPat = ...
+fieldPatIdKey = mkPreludeMiscIdUnique 230
+
+-- data Match = ...
+matchIdKey = mkPreludeMiscIdUnique 231
+
+-- data Clause = ...
+clauseIdKey = mkPreludeMiscIdUnique 232
+
+-- data Exp = ...
+varEIdKey = mkPreludeMiscIdUnique 240
+conEIdKey = mkPreludeMiscIdUnique 241
+litEIdKey = mkPreludeMiscIdUnique 242
+appEIdKey = mkPreludeMiscIdUnique 243
+infixEIdKey = mkPreludeMiscIdUnique 244
+infixAppIdKey = mkPreludeMiscIdUnique 245
+sectionLIdKey = mkPreludeMiscIdUnique 246
+sectionRIdKey = mkPreludeMiscIdUnique 247
+lamEIdKey = mkPreludeMiscIdUnique 248
+tupEIdKey = mkPreludeMiscIdUnique 249
+condEIdKey = mkPreludeMiscIdUnique 250
+letEIdKey = mkPreludeMiscIdUnique 251
+caseEIdKey = mkPreludeMiscIdUnique 252
+doEIdKey = mkPreludeMiscIdUnique 253
+compEIdKey = mkPreludeMiscIdUnique 254
+fromEIdKey = mkPreludeMiscIdUnique 255
+fromThenEIdKey = mkPreludeMiscIdUnique 256
+fromToEIdKey = mkPreludeMiscIdUnique 257
+fromThenToEIdKey = mkPreludeMiscIdUnique 258
+listEIdKey = mkPreludeMiscIdUnique 259
+sigEIdKey = mkPreludeMiscIdUnique 260
+recConEIdKey = mkPreludeMiscIdUnique 261
+recUpdEIdKey = mkPreludeMiscIdUnique 262
+
+-- type FieldExp = ...
+fieldExpIdKey = mkPreludeMiscIdUnique 265
+
+-- data Body = ...
+guardedBIdKey = mkPreludeMiscIdUnique 266
+normalBIdKey = mkPreludeMiscIdUnique 267
+
+-- data Stmt = ...
+bindSIdKey = mkPreludeMiscIdUnique 268
+letSIdKey = mkPreludeMiscIdUnique 269
+noBindSIdKey = mkPreludeMiscIdUnique 270
+parSIdKey = mkPreludeMiscIdUnique 271
+
+-- data Dec = ...
+funDIdKey = mkPreludeMiscIdUnique 272
+valDIdKey = mkPreludeMiscIdUnique 273
+dataDIdKey = mkPreludeMiscIdUnique 274
+newtypeDIdKey = mkPreludeMiscIdUnique 275
+tySynDIdKey = mkPreludeMiscIdUnique 276
+classDIdKey = mkPreludeMiscIdUnique 277
+instanceDIdKey = mkPreludeMiscIdUnique 278
+sigDIdKey = mkPreludeMiscIdUnique 279
+
+-- type Cxt = ...
+cxtIdKey = mkPreludeMiscIdUnique 280
+
+-- data Strict = ...
+isStrictKey = mkPreludeMiscIdUnique 281
+notStrictKey = mkPreludeMiscIdUnique 282
+
+-- data Con = ...
+normalCIdKey = mkPreludeMiscIdUnique 283
+recCIdKey = mkPreludeMiscIdUnique 284
+infixCIdKey = mkPreludeMiscIdUnique 285
+
+-- type StrictType = ...
+strictTKey = mkPreludeMiscIdUnique 2286
+
+-- type VarStrictType = ...
+varStrictTKey = mkPreludeMiscIdUnique 287
+
+-- data Type = ...
+forallTIdKey = mkPreludeMiscIdUnique 290
+varTIdKey = mkPreludeMiscIdUnique 291
+conTIdKey = mkPreludeMiscIdUnique 292
+tupleTIdKey = mkPreludeMiscIdUnique 294
+arrowTIdKey = mkPreludeMiscIdUnique 295
+listTIdKey = mkPreludeMiscIdUnique 296
+appTIdKey = mkPreludeMiscIdUnique 293
+
+-- %************************************************************************
+-- %* *
+-- Other utilities
+-- %* *
+-- %************************************************************************
+
+-- It is rather usatisfactory that we don't have a SrcLoc
+addDsWarn :: SDoc -> DsM ()
+addDsWarn msg = dsWarn (noSrcLoc, msg)
+