+
+
+
+-- %************************************************************************
+-- %* *
+-- 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 [ integerLName,charLName, stringLName, rationalLName,
+ plitName, pvarName, ptupName,
+ pconName, ptildeName, paspatName, pwildName,
+ varName, conName, litName, appName, infixEName, lamName,
+ tupName, doEName, compName,
+ listExpName, sigExpName, condName, letEName, caseEName,
+ infixAppName, sectionLName, sectionRName,
+ guardedName, normalName,
+ bindStName, letStName, noBindStName, parStName,
+ fromName, fromThenName, fromToName, fromThenToName,
+ funName, valName, liftName,
+ gensymName, returnQName, bindQName, sequenceQName,
+ matchName, clauseName, funName, valName, tySynDName, dataDName, classDName,
+ instName, protoName, tforallName, tvarName, tconName, tappName,
+ arrowTyConName, tupleTyConName, listTyConName, namedTyConName,
+ ctxtName, constrName, recConstrName, infixConstrName,
+ exprTyConName, declTyConName, pattTyConName, mtchTyConName,
+ clseTyConName, stmtTyConName, consTyConName, typeTyConName,
+ strTypeTyConName, varStrTypeTyConName,
+ qTyConName, expTyConName, matTyConName, clsTyConName,
+ decTyConName, typTyConName, strictTypeName, varStrictTypeName,
+ recConName, recUpdName, precName,
+ fieldName, fieldTyConName, fieldPName, fieldPTyConName,
+ strictName, nonstrictName ]
+
+
+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
+
+integerLName = varQual FSLIT("integerL") integerLIdKey
+charLName = varQual FSLIT("charL") charLIdKey
+stringLName = varQual FSLIT("stringL") stringLIdKey
+rationalLName = varQual FSLIT("rationalL") rationalLIdKey
+plitName = varQual FSLIT("plit") plitIdKey
+pvarName = varQual FSLIT("pvar") pvarIdKey
+ptupName = varQual FSLIT("ptup") ptupIdKey
+pconName = varQual FSLIT("pcon") pconIdKey
+ptildeName = varQual FSLIT("ptilde") ptildeIdKey
+paspatName = varQual FSLIT("paspat") paspatIdKey
+pwildName = varQual FSLIT("pwild") pwildIdKey
+precName = varQual FSLIT("prec") precIdKey
+varName = varQual FSLIT("var") varIdKey
+conName = varQual FSLIT("con") conIdKey
+litName = varQual FSLIT("lit") litIdKey
+appName = varQual FSLIT("app") appIdKey
+infixEName = varQual FSLIT("infixE") infixEIdKey
+lamName = varQual FSLIT("lam") lamIdKey
+tupName = varQual FSLIT("tup") tupIdKey
+doEName = varQual FSLIT("doE") doEIdKey
+compName = varQual FSLIT("comp") compIdKey
+listExpName = varQual FSLIT("listExp") listExpIdKey
+sigExpName = varQual FSLIT("sigExp") sigExpIdKey
+condName = varQual FSLIT("cond") condIdKey
+letEName = varQual FSLIT("letE") letEIdKey
+caseEName = varQual FSLIT("caseE") caseEIdKey
+infixAppName = varQual FSLIT("infixApp") infixAppIdKey
+sectionLName = varQual FSLIT("sectionL") sectionLIdKey
+sectionRName = varQual FSLIT("sectionR") sectionRIdKey
+recConName = varQual FSLIT("recCon") recConIdKey
+recUpdName = varQual FSLIT("recUpd") recUpdIdKey
+guardedName = varQual FSLIT("guarded") guardedIdKey
+normalName = varQual FSLIT("normal") normalIdKey
+bindStName = varQual FSLIT("bindSt") bindStIdKey
+letStName = varQual FSLIT("letSt") letStIdKey
+noBindStName = varQual FSLIT("noBindSt") noBindStIdKey
+parStName = varQual FSLIT("parSt") parStIdKey
+fromName = varQual FSLIT("from") fromIdKey
+fromThenName = varQual FSLIT("fromThen") fromThenIdKey
+fromToName = varQual FSLIT("fromTo") fromToIdKey
+fromThenToName = varQual FSLIT("fromThenTo") fromThenToIdKey
+liftName = varQual FSLIT("lift") liftIdKey
+gensymName = varQual FSLIT("gensym") gensymIdKey
+returnQName = varQual FSLIT("returnQ") returnQIdKey
+bindQName = varQual FSLIT("bindQ") bindQIdKey
+sequenceQName = varQual FSLIT("sequenceQ") sequenceQIdKey
+
+-- type Mat = ...
+matchName = varQual FSLIT("match") matchIdKey
+
+-- type Cls = ...
+clauseName = varQual FSLIT("clause") clauseIdKey
+
+-- data Dec = ...
+funName = varQual FSLIT("fun") funIdKey
+valName = varQual FSLIT("val") valIdKey
+dataDName = varQual FSLIT("dataD") dataDIdKey
+tySynDName = varQual FSLIT("tySynD") tySynDIdKey
+classDName = varQual FSLIT("classD") classDIdKey
+instName = varQual FSLIT("inst") instIdKey
+protoName = varQual FSLIT("proto") protoIdKey
+
+-- data Typ = ...
+tforallName = varQual FSLIT("tforall") tforallIdKey
+tvarName = varQual FSLIT("tvar") tvarIdKey
+tconName = varQual FSLIT("tcon") tconIdKey
+tappName = varQual FSLIT("tapp") tappIdKey
+
+-- data Tag = ...
+arrowTyConName = varQual FSLIT("arrowTyCon") arrowIdKey
+tupleTyConName = varQual FSLIT("tupleTyCon") tupleIdKey
+listTyConName = varQual FSLIT("listTyCon") listIdKey
+namedTyConName = varQual FSLIT("namedTyCon") namedTyConIdKey
+
+-- type Ctxt = ...
+ctxtName = varQual FSLIT("ctxt") ctxtIdKey
+
+-- data Con = ...
+constrName = varQual FSLIT("constr") constrIdKey
+recConstrName = varQual FSLIT("recConstr") recConstrIdKey
+infixConstrName = varQual FSLIT("infixConstr") infixConstrIdKey
+
+exprTyConName = tcQual FSLIT("Expr") exprTyConKey
+declTyConName = tcQual FSLIT("Decl") declTyConKey
+pattTyConName = tcQual FSLIT("Patt") pattTyConKey
+mtchTyConName = tcQual FSLIT("Mtch") mtchTyConKey
+clseTyConName = tcQual FSLIT("Clse") clseTyConKey
+stmtTyConName = tcQual FSLIT("Stmt") stmtTyConKey
+consTyConName = tcQual FSLIT("Cons") consTyConKey
+typeTyConName = tcQual FSLIT("Type") typeTyConKey
+strTypeTyConName = tcQual FSLIT("StrType") strTypeTyConKey
+varStrTypeTyConName = tcQual FSLIT("VarStrType") varStrTypeTyConKey
+
+fieldTyConName = tcQual FSLIT("FldE") fieldTyConKey
+fieldPTyConName = tcQual FSLIT("FldP") fieldPTyConKey
+
+qTyConName = tcQual FSLIT("Q") qTyConKey
+expTyConName = tcQual FSLIT("Exp") expTyConKey
+decTyConName = tcQual FSLIT("Dec") decTyConKey
+typTyConName = tcQual FSLIT("Typ") typTyConKey
+matTyConName = tcQual FSLIT("Mat") matTyConKey
+clsTyConName = tcQual FSLIT("Cls") clsTyConKey
+
+strictTypeName = varQual FSLIT("strictType") strictTypeKey
+varStrictTypeName = varQual FSLIT("varStrictType") varStrictTypeKey
+strictName = varQual FSLIT("strict") strictKey
+nonstrictName = varQual FSLIT("nonstrict") nonstrictKey
+
+fieldName = varQual FSLIT("field") fieldKey
+fieldPName = varQual FSLIT("fieldP") fieldPKey
+
+-- TyConUniques available: 100-119
+-- Check in PrelNames if you want to change this
+
+expTyConKey = mkPreludeTyConUnique 100
+matTyConKey = mkPreludeTyConUnique 101
+clsTyConKey = mkPreludeTyConUnique 102
+qTyConKey = mkPreludeTyConUnique 103
+exprTyConKey = mkPreludeTyConUnique 104
+declTyConKey = mkPreludeTyConUnique 105
+pattTyConKey = mkPreludeTyConUnique 106
+mtchTyConKey = mkPreludeTyConUnique 107
+clseTyConKey = mkPreludeTyConUnique 108
+stmtTyConKey = mkPreludeTyConUnique 109
+consTyConKey = mkPreludeTyConUnique 110
+typeTyConKey = mkPreludeTyConUnique 111
+typTyConKey = mkPreludeTyConUnique 112
+decTyConKey = mkPreludeTyConUnique 113
+varStrTypeTyConKey = mkPreludeTyConUnique 114
+strTypeTyConKey = mkPreludeTyConUnique 115
+fieldTyConKey = mkPreludeTyConUnique 116
+fieldPTyConKey = mkPreludeTyConUnique 117
+
+
+
+-- IdUniques available: 200-299
+-- If you want to change this, make sure you check in PrelNames
+fromIdKey = mkPreludeMiscIdUnique 200
+fromThenIdKey = mkPreludeMiscIdUnique 201
+fromToIdKey = mkPreludeMiscIdUnique 202
+fromThenToIdKey = mkPreludeMiscIdUnique 203
+liftIdKey = mkPreludeMiscIdUnique 204
+gensymIdKey = mkPreludeMiscIdUnique 205
+returnQIdKey = mkPreludeMiscIdUnique 206
+bindQIdKey = mkPreludeMiscIdUnique 207
+funIdKey = mkPreludeMiscIdUnique 208
+valIdKey = mkPreludeMiscIdUnique 209
+protoIdKey = mkPreludeMiscIdUnique 210
+matchIdKey = mkPreludeMiscIdUnique 211
+clauseIdKey = mkPreludeMiscIdUnique 212
+integerLIdKey = mkPreludeMiscIdUnique 213
+charLIdKey = mkPreludeMiscIdUnique 214
+
+classDIdKey = mkPreludeMiscIdUnique 215
+instIdKey = mkPreludeMiscIdUnique 216
+dataDIdKey = mkPreludeMiscIdUnique 217
+
+sequenceQIdKey = mkPreludeMiscIdUnique 218
+tySynDIdKey = mkPreludeMiscIdUnique 219
+
+plitIdKey = mkPreludeMiscIdUnique 220
+pvarIdKey = mkPreludeMiscIdUnique 221
+ptupIdKey = mkPreludeMiscIdUnique 222
+pconIdKey = mkPreludeMiscIdUnique 223
+ptildeIdKey = mkPreludeMiscIdUnique 224
+paspatIdKey = mkPreludeMiscIdUnique 225
+pwildIdKey = mkPreludeMiscIdUnique 226
+varIdKey = mkPreludeMiscIdUnique 227
+conIdKey = mkPreludeMiscIdUnique 228
+litIdKey = mkPreludeMiscIdUnique 229
+appIdKey = mkPreludeMiscIdUnique 230
+infixEIdKey = mkPreludeMiscIdUnique 231
+lamIdKey = mkPreludeMiscIdUnique 232
+tupIdKey = mkPreludeMiscIdUnique 233
+doEIdKey = mkPreludeMiscIdUnique 234
+compIdKey = mkPreludeMiscIdUnique 235
+listExpIdKey = mkPreludeMiscIdUnique 237
+condIdKey = mkPreludeMiscIdUnique 238
+letEIdKey = mkPreludeMiscIdUnique 239
+caseEIdKey = mkPreludeMiscIdUnique 240
+infixAppIdKey = mkPreludeMiscIdUnique 241
+-- 242 unallocated
+sectionLIdKey = mkPreludeMiscIdUnique 243
+sectionRIdKey = mkPreludeMiscIdUnique 244
+guardedIdKey = mkPreludeMiscIdUnique 245
+normalIdKey = mkPreludeMiscIdUnique 246
+bindStIdKey = mkPreludeMiscIdUnique 247
+letStIdKey = mkPreludeMiscIdUnique 248
+noBindStIdKey = mkPreludeMiscIdUnique 249
+parStIdKey = mkPreludeMiscIdUnique 250
+
+tforallIdKey = mkPreludeMiscIdUnique 251
+tvarIdKey = mkPreludeMiscIdUnique 252
+tconIdKey = mkPreludeMiscIdUnique 253
+tappIdKey = mkPreludeMiscIdUnique 254
+
+arrowIdKey = mkPreludeMiscIdUnique 255
+tupleIdKey = mkPreludeMiscIdUnique 256
+listIdKey = mkPreludeMiscIdUnique 257
+namedTyConIdKey = mkPreludeMiscIdUnique 258
+
+ctxtIdKey = mkPreludeMiscIdUnique 259
+
+constrIdKey = mkPreludeMiscIdUnique 260
+
+stringLIdKey = mkPreludeMiscIdUnique 261
+rationalLIdKey = mkPreludeMiscIdUnique 262
+
+sigExpIdKey = mkPreludeMiscIdUnique 263
+
+strictTypeKey = mkPreludeMiscIdUnique 264
+strictKey = mkPreludeMiscIdUnique 265
+nonstrictKey = mkPreludeMiscIdUnique 266
+varStrictTypeKey = mkPreludeMiscIdUnique 267
+
+recConstrIdKey = mkPreludeMiscIdUnique 268
+infixConstrIdKey = mkPreludeMiscIdUnique 269
+
+recConIdKey = mkPreludeMiscIdUnique 270
+recUpdIdKey = mkPreludeMiscIdUnique 271
+precIdKey = mkPreludeMiscIdUnique 272
+fieldKey = mkPreludeMiscIdUnique 273
+fieldPKey = mkPreludeMiscIdUnique 274
+
+
+-- %************************************************************************
+-- %* *
+-- Other utilities
+-- %* *
+-- %************************************************************************
+
+-- It is rather usatisfactory that we don't have a SrcLoc
+addDsWarn :: SDoc -> DsM ()
+addDsWarn msg = dsWarn (noSrcLoc, msg)