X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FPrelInfo.lhs;h=c1e3a9dacc5c8011f2d9f01339696853edff29e9;hb=b4613af39b9a0829c13eb2987a0469bff5ada16c;hp=0d16747aad9d2a20faae416cbf1e7112090c80d8;hpb=438596897ebbe25a07e1c82085cfbc5bdb00f09e;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/PrelInfo.lhs b/ghc/compiler/prelude/PrelInfo.lhs index 0d16747..c1e3a9d 100644 --- a/ghc/compiler/prelude/PrelInfo.lhs +++ b/ghc/compiler/prelude/PrelInfo.lhs @@ -44,7 +44,7 @@ module PrelInfo ( -- RdrNames for lots of things, mainly used in derivings eq_RDR, ne_RDR, le_RDR, lt_RDR, ge_RDR, gt_RDR, max_RDR, min_RDR, compare_RDR, minBound_RDR, maxBound_RDR, enumFrom_RDR, enumFromTo_RDR, - enumFromThen_RDR, enumFromThenTo_RDR, fromEnum_RDR, toEnum_RDR, + enumFromThen_RDR, enumFromThenTo_RDR, succ_RDR, pred_RDR, fromEnum_RDR, toEnum_RDR, ratioDataCon_RDR, range_RDR, index_RDR, inRange_RDR, readsPrec_RDR, readList_RDR, showsPrec_RDR, showList_RDR, plus_RDR, times_RDR, ltTag_RDR, eqTag_RDR, gtTag_RDR, eqH_Char_RDR, ltH_Char_RDR, @@ -58,8 +58,10 @@ module PrelInfo ( numClass_RDR, fractionalClass_RDR, eqClass_RDR, ccallableClass_RDR, creturnableClass_RDR, - monadZeroClass_RDR, enumClass_RDR, ordClass_RDR, - ioDataCon_RDR + monadClass_RDR, enumClass_RDR, ordClass_RDR, + ioDataCon_RDR, + + mkTupConRdrName, mkUbxTupConRdrName ) where @@ -77,19 +79,21 @@ import TysPrim -- TYPES import TysWiredIn -- others: -import RdrHsSyn ( RdrName(..), varQual, tcQual, qual ) -import BasicTypes ( IfaceFlavour ) +import RdrName ( RdrName, mkPreludeQual ) import Var ( varUnique, Id ) -import Name ( Name, OccName(..), Provenance(..), - getName, mkGlobalName, modAndOcc +import Name ( Name, OccName, Provenance(..), + NameSpace, tcName, clsName, varName, dataName, + getName, mkGlobalName, nameRdrName, systemProvenance ) +import RdrName ( rdrNameModule, rdrNameOcc, mkSrcQual ) import Class ( Class, classKey ) import TyCon ( tyConDataCons, TyCon ) import Type ( funTyCon ) import Bag import Unique -- *Key stuff import UniqFM ( UniqFM, listToUFM, lookupWithDefaultUFM ) -import Util ( isIn, panic ) +import Util ( isIn ) +import Panic ( panic ) import IOExts \end{code} @@ -168,6 +172,7 @@ prim_tycons , mutVarPrimTyCon , realWorldTyCon , stablePtrPrimTyCon + , stableNamePrimTyCon , statePrimTyCon , threadIdPrimTyCon , wordPrimTyCon @@ -190,7 +195,6 @@ data_tycons , int64TyCon , integerTyCon , listTyCon - , voidTyCon , wordTyCon , word8TyCon , word16TyCon @@ -209,8 +213,13 @@ data_tycons \begin{code} wired_in_ids = [ -- These error-y things are wired in because we don't yet have - -- a way to express in an inteface file that the result type variable + -- a way to express in an interface file that the result type variable -- is 'open'; that is can be unified with an unboxed type + -- + -- [The interface file format now carry such information, but there's + -- no way yet of expressing at the definition site for these error-reporting + -- functions that they have an 'open' result type. -- sof 1/99] + -- aBSENT_ERROR_ID , eRROR_ID , iRREFUT_PAT_ERROR_ID @@ -249,26 +258,26 @@ thinAirIdNames = map mkKnownKeyGlobal [ -- Needed for converting literals to Integers (used in tidyCoreExpr) - (varQual (pREL_BASE, SLIT("int2Integer")), int2IntegerIdKey) - , (varQual (pREL_BASE, SLIT("addr2Integer")), addr2IntegerIdKey) + (varQual pREL_BASE SLIT("int2Integer"), int2IntegerIdKey) + , (varQual pREL_BASE SLIT("addr2Integer"), addr2IntegerIdKey) -- OK, this is Will's idea: we should have magic values for Integers 0, -- +1, +2, and -1 (go ahead, fire me): - , (varQual (pREL_BASE, SLIT("integer_0")), integerZeroIdKey) - , (varQual (pREL_BASE, SLIT("integer_1")), integerPlusOneIdKey) - , (varQual (pREL_BASE, SLIT("integer_2")), integerPlusTwoIdKey) - , (varQual (pREL_BASE, SLIT("integer_m1")), integerMinusOneIdKey) + , (varQual pREL_BASE SLIT("integer_0"), integerZeroIdKey) + , (varQual pREL_BASE SLIT("integer_1"), integerPlusOneIdKey) + , (varQual pREL_BASE SLIT("integer_2"), integerPlusTwoIdKey) + , (varQual pREL_BASE SLIT("integer_m1"), integerMinusOneIdKey) -- String literals - , (varQual (pREL_PACK, SLIT("packCString#")), packCStringIdKey) - , (varQual (pREL_PACK, SLIT("unpackCString#")), unpackCStringIdKey) - , (varQual (pREL_PACK, SLIT("unpackNBytes#")), unpackCString2IdKey) - , (varQual (pREL_PACK, SLIT("unpackAppendCString#")), unpackCStringAppendIdKey) - , (varQual (pREL_PACK, SLIT("unpackFoldrCString#")), unpackCStringFoldrIdKey) + , (varQual pREL_PACK SLIT("packCString#"), packCStringIdKey) + , (varQual pREL_PACK SLIT("unpackCString#"), unpackCStringIdKey) + , (varQual pREL_PACK SLIT("unpackNBytes#"), unpackCString2IdKey) + , (varQual pREL_PACK SLIT("unpackAppendCString#"), unpackCStringAppendIdKey) + , (varQual pREL_PACK SLIT("unpackFoldrCString#"), unpackCStringFoldrIdKey) -- Folds; introduced by desugaring list comprehensions - , (varQual (pREL_BASE, SLIT("foldr")), foldrIdKey) + , (varQual pREL_BASE SLIT("foldr"), foldrIdKey) ] thinAirModules = [pREL_PACK] -- See notes with RnIfaces.findAndReadIface @@ -329,8 +338,9 @@ Ids, Synonyms, Classes and ClassOps with builtin keys. \begin{code} mkKnownKeyGlobal :: (RdrName, Unique) -> Name -mkKnownKeyGlobal (Qual mod occ hif, uniq) - = mkGlobalName uniq mod occ NoProvenance +mkKnownKeyGlobal (rdr_name, uniq) + = mkGlobalName uniq (rdrNameModule rdr_name) (rdrNameOcc rdr_name) + systemProvenance ioTyCon_NAME = mkKnownKeyGlobal (ioTyCon_RDR, ioTyConKey) main_NAME = mkKnownKeyGlobal (main_RDR, mainKey) @@ -365,7 +375,6 @@ knownKeyNames , (numClass_RDR, numClassKey) -- mentioned, numeric , (enumClass_RDR, enumClassKey) -- derivable , (monadClass_RDR, monadClassKey) - , (monadZeroClass_RDR, monadZeroClassKey) , (monadPlusClass_RDR, monadPlusClassKey) , (functorClass_RDR, functorClassKey) , (showClass_RDR, showClassKey) -- derivable @@ -394,7 +403,7 @@ knownKeyNames , (eq_RDR, eqClassOpKey) , (thenM_RDR, thenMClassOpKey) , (returnM_RDR, returnMClassOpKey) - , (zeroM_RDR, zeroClassOpKey) + , (failM_RDR, failMClassOpKey) , (fromRational_RDR, fromRationalClassOpKey) , (deRefStablePtr_RDR, deRefStablePtrIdKey) @@ -434,115 +443,116 @@ These RdrNames are not really "built in", but some parts of the compiler to write them all down in one place. \begin{code} -prelude_primop op = qual (modAndOcc (mkPrimitiveId op)) - -main_RDR = varQual (mAIN, SLIT("main")) -otherwiseId_RDR = varQual (pREL_BASE, SLIT("otherwise")) - -intTyCon_RDR = qual (modAndOcc intTyCon) -ioTyCon_RDR = tcQual (pREL_IO_BASE, SLIT("IO")) -ioDataCon_RDR = varQual (pREL_IO_BASE, SLIT("IO")) -bindIO_RDR = varQual (pREL_IO_BASE, SLIT("bindIO")) - -orderingTyCon_RDR = tcQual (pREL_BASE, SLIT("Ordering")) -rationalTyCon_RDR = tcQual (pREL_NUM, SLIT("Rational")) -ratioTyCon_RDR = tcQual (pREL_NUM, SLIT("Ratio")) -ratioDataCon_RDR = varQual (pREL_NUM, SLIT(":%")) - -byteArrayTyCon_RDR = tcQual (pREL_ARR, SLIT("ByteArray")) -mutableByteArrayTyCon_RDR = tcQual (pREL_ARR, SLIT("MutableByteArray")) - -foreignObjTyCon_RDR = tcQual (pREL_IO_BASE, SLIT("ForeignObj")) -stablePtrTyCon_RDR = tcQual (pREL_FOREIGN, SLIT("StablePtr")) -deRefStablePtr_RDR = varQual (pREL_FOREIGN, SLIT("deRefStablePtr")) -makeStablePtr_RDR = varQual (pREL_FOREIGN, SLIT("makeStablePtr")) - -eqClass_RDR = tcQual (pREL_BASE, SLIT("Eq")) -ordClass_RDR = tcQual (pREL_BASE, SLIT("Ord")) -boundedClass_RDR = tcQual (pREL_BASE, SLIT("Bounded")) -numClass_RDR = tcQual (pREL_BASE, SLIT("Num")) -enumClass_RDR = tcQual (pREL_BASE, SLIT("Enum")) -monadClass_RDR = tcQual (pREL_BASE, SLIT("Monad")) -monadZeroClass_RDR = tcQual (pREL_BASE, SLIT("MonadZero")) -monadPlusClass_RDR = tcQual (pREL_BASE, SLIT("MonadPlus")) -functorClass_RDR = tcQual (pREL_BASE, SLIT("Functor")) -showClass_RDR = tcQual (pREL_BASE, SLIT("Show")) -realClass_RDR = tcQual (pREL_NUM, SLIT("Real")) -integralClass_RDR = tcQual (pREL_NUM, SLIT("Integral")) -fractionalClass_RDR = tcQual (pREL_NUM, SLIT("Fractional")) -floatingClass_RDR = tcQual (pREL_NUM, SLIT("Floating")) -realFracClass_RDR = tcQual (pREL_NUM, SLIT("RealFrac")) -realFloatClass_RDR = tcQual (pREL_NUM, SLIT("RealFloat")) -readClass_RDR = tcQual (pREL_READ, SLIT("Read")) -ixClass_RDR = tcQual (iX, SLIT("Ix")) -ccallableClass_RDR = tcQual (pREL_GHC, SLIT("CCallable")) -creturnableClass_RDR = tcQual (pREL_GHC, SLIT("CReturnable")) - -fromInt_RDR = varQual (pREL_BASE, SLIT("fromInt")) -fromInteger_RDR = varQual (pREL_BASE, SLIT("fromInteger")) -minus_RDR = varQual (pREL_BASE, SLIT("-")) -toEnum_RDR = varQual (pREL_BASE, SLIT("toEnum")) -fromEnum_RDR = varQual (pREL_BASE, SLIT("fromEnum")) -enumFrom_RDR = varQual (pREL_BASE, SLIT("enumFrom")) -enumFromTo_RDR = varQual (pREL_BASE, SLIT("enumFromTo")) -enumFromThen_RDR = varQual (pREL_BASE, SLIT("enumFromThen")) -enumFromThenTo_RDR = varQual (pREL_BASE, SLIT("enumFromThenTo")) - -thenM_RDR = varQual (pREL_BASE, SLIT(">>=")) -returnM_RDR = varQual (pREL_BASE, SLIT("return")) -zeroM_RDR = varQual (pREL_BASE, SLIT("zero")) - -fromRational_RDR = varQual (pREL_NUM, SLIT("fromRational")) -negate_RDR = varQual (pREL_BASE, SLIT("negate")) -eq_RDR = varQual (pREL_BASE, SLIT("==")) -ne_RDR = varQual (pREL_BASE, SLIT("/=")) -le_RDR = varQual (pREL_BASE, SLIT("<=")) -lt_RDR = varQual (pREL_BASE, SLIT("<")) -ge_RDR = varQual (pREL_BASE, SLIT(">=")) -gt_RDR = varQual (pREL_BASE, SLIT(">")) -ltTag_RDR = varQual (pREL_BASE, SLIT("LT")) -eqTag_RDR = varQual (pREL_BASE, SLIT("EQ")) -gtTag_RDR = varQual (pREL_BASE, SLIT("GT")) -max_RDR = varQual (pREL_BASE, SLIT("max")) -min_RDR = varQual (pREL_BASE, SLIT("min")) -compare_RDR = varQual (pREL_BASE, SLIT("compare")) -minBound_RDR = varQual (pREL_BASE, SLIT("minBound")) -maxBound_RDR = varQual (pREL_BASE, SLIT("maxBound")) -false_RDR = varQual (pREL_BASE, SLIT("False")) -true_RDR = varQual (pREL_BASE, SLIT("True")) -and_RDR = varQual (pREL_BASE, SLIT("&&")) -not_RDR = varQual (pREL_BASE, SLIT("not")) -compose_RDR = varQual (pREL_BASE, SLIT(".")) -append_RDR = varQual (pREL_BASE, SLIT("++")) -map_RDR = varQual (pREL_BASE, SLIT("map")) -concat_RDR = varQual (mONAD, SLIT("concat")) -filter_RDR = varQual (mONAD, SLIT("filter")) -zip_RDR = varQual (pREL_LIST, SLIT("zip")) - -showList___RDR = varQual (pREL_BASE, SLIT("showList__")) -showsPrec_RDR = varQual (pREL_BASE, SLIT("showsPrec")) -showList_RDR = varQual (pREL_BASE, SLIT("showList")) -showSpace_RDR = varQual (pREL_BASE, SLIT("showSpace")) -showString_RDR = varQual (pREL_BASE, SLIT("showString")) -showParen_RDR = varQual (pREL_BASE, SLIT("showParen")) - -range_RDR = varQual (iX, SLIT("range")) -index_RDR = varQual (iX, SLIT("index")) -inRange_RDR = varQual (iX, SLIT("inRange")) - -readsPrec_RDR = varQual (pREL_READ, SLIT("readsPrec")) -readList_RDR = varQual (pREL_READ, SLIT("readList")) -readParen_RDR = varQual (pREL_READ, SLIT("readParen")) -lex_RDR = varQual (pREL_READ, SLIT("lex")) -readList___RDR = varQual (pREL_READ, SLIT("readList__")) - -plus_RDR = varQual (pREL_BASE, SLIT("+")) -times_RDR = varQual (pREL_BASE, SLIT("*")) -mkInt_RDR = varQual (pREL_BASE, SLIT("I#")) - -error_RDR = varQual (pREL_ERR, SLIT("error")) -assert_RDR = varQual (pREL_GHC, SLIT("assert")) -assertErr_RDR = varQual (pREL_ERR, SLIT("assertError")) +prelude_primop op = nameRdrName (getName (mkPrimitiveId op)) + +main_RDR = varQual mAIN SLIT("main") +otherwiseId_RDR = varQual pREL_BASE SLIT("otherwise") + +intTyCon_RDR = nameRdrName (getName intTyCon) +ioTyCon_RDR = tcQual pREL_IO_BASE SLIT("IO") +ioDataCon_RDR = dataQual pREL_IO_BASE SLIT("IO") +bindIO_RDR = varQual pREL_IO_BASE SLIT("bindIO") + +orderingTyCon_RDR = tcQual pREL_BASE SLIT("Ordering") +rationalTyCon_RDR = tcQual pREL_NUM SLIT("Rational") +ratioTyCon_RDR = tcQual pREL_NUM SLIT("Ratio") +ratioDataCon_RDR = dataQual pREL_NUM SLIT(":%") + +byteArrayTyCon_RDR = tcQual pREL_ARR SLIT("ByteArray") +mutableByteArrayTyCon_RDR = tcQual pREL_ARR SLIT("MutableByteArray") + +foreignObjTyCon_RDR = tcQual pREL_IO_BASE SLIT("ForeignObj") +stablePtrTyCon_RDR = tcQual pREL_STABLE SLIT("StablePtr") +deRefStablePtr_RDR = varQual pREL_STABLE SLIT("deRefStablePtr") +makeStablePtr_RDR = varQual pREL_STABLE SLIT("makeStablePtr") + +eqClass_RDR = clsQual pREL_BASE SLIT("Eq") +ordClass_RDR = clsQual pREL_BASE SLIT("Ord") +boundedClass_RDR = clsQual pREL_BASE SLIT("Bounded") +numClass_RDR = clsQual pREL_BASE SLIT("Num") +enumClass_RDR = clsQual pREL_BASE SLIT("Enum") +monadClass_RDR = clsQual pREL_BASE SLIT("Monad") +monadPlusClass_RDR = clsQual pREL_BASE SLIT("MonadPlus") +functorClass_RDR = clsQual pREL_BASE SLIT("Functor") +showClass_RDR = clsQual pREL_BASE SLIT("Show") +realClass_RDR = clsQual pREL_NUM SLIT("Real") +integralClass_RDR = clsQual pREL_NUM SLIT("Integral") +fractionalClass_RDR = clsQual pREL_NUM SLIT("Fractional") +floatingClass_RDR = clsQual pREL_NUM SLIT("Floating") +realFracClass_RDR = clsQual pREL_NUM SLIT("RealFrac") +realFloatClass_RDR = clsQual pREL_NUM SLIT("RealFloat") +readClass_RDR = clsQual pREL_READ SLIT("Read") +ixClass_RDR = clsQual iX SLIT("Ix") +ccallableClass_RDR = clsQual pREL_GHC SLIT("CCallable") +creturnableClass_RDR = clsQual pREL_GHC SLIT("CReturnable") + +fromInt_RDR = varQual pREL_BASE SLIT("fromInt") +fromInteger_RDR = varQual pREL_BASE SLIT("fromInteger") +minus_RDR = varQual pREL_BASE SLIT("-") +succ_RDR = varQual pREL_BASE SLIT("succ") +pred_RDR = varQual pREL_BASE SLIT("pred") +toEnum_RDR = varQual pREL_BASE SLIT("toEnum") +fromEnum_RDR = varQual pREL_BASE SLIT("fromEnum") +enumFrom_RDR = varQual pREL_BASE SLIT("enumFrom") +enumFromTo_RDR = varQual pREL_BASE SLIT("enumFromTo") +enumFromThen_RDR = varQual pREL_BASE SLIT("enumFromThen") +enumFromThenTo_RDR = varQual pREL_BASE SLIT("enumFromThenTo") + +thenM_RDR = varQual pREL_BASE SLIT(">>=") +returnM_RDR = varQual pREL_BASE SLIT("return") +failM_RDR = varQual pREL_BASE SLIT("fail") + +fromRational_RDR = varQual pREL_NUM SLIT("fromRational") +negate_RDR = varQual pREL_BASE SLIT("negate") +eq_RDR = varQual pREL_BASE SLIT("==") +ne_RDR = varQual pREL_BASE SLIT("/=") +le_RDR = varQual pREL_BASE SLIT("<=") +lt_RDR = varQual pREL_BASE SLIT("<") +ge_RDR = varQual pREL_BASE SLIT(">=") +gt_RDR = varQual pREL_BASE SLIT(">") +ltTag_RDR = dataQual pREL_BASE SLIT("LT") +eqTag_RDR = dataQual pREL_BASE SLIT("EQ") +gtTag_RDR = dataQual pREL_BASE SLIT("GT") +max_RDR = varQual pREL_BASE SLIT("max") +min_RDR = varQual pREL_BASE SLIT("min") +compare_RDR = varQual pREL_BASE SLIT("compare") +minBound_RDR = varQual pREL_BASE SLIT("minBound") +maxBound_RDR = varQual pREL_BASE SLIT("maxBound") +false_RDR = dataQual pREL_BASE SLIT("False") +true_RDR = dataQual pREL_BASE SLIT("True") +and_RDR = varQual pREL_BASE SLIT("&&") +not_RDR = varQual pREL_BASE SLIT("not") +compose_RDR = varQual pREL_BASE SLIT(".") +append_RDR = varQual pREL_BASE SLIT("++") +map_RDR = varQual pREL_BASE SLIT("map") +concat_RDR = varQual mONAD SLIT("concat") +filter_RDR = varQual mONAD SLIT("filter") +zip_RDR = varQual pREL_LIST SLIT("zip") + +showList___RDR = varQual pREL_BASE SLIT("showList__") +showsPrec_RDR = varQual pREL_BASE SLIT("showsPrec") +showList_RDR = varQual pREL_BASE SLIT("showList") +showSpace_RDR = varQual pREL_BASE SLIT("showSpace") +showString_RDR = varQual pREL_BASE SLIT("showString") +showParen_RDR = varQual pREL_BASE SLIT("showParen") + +range_RDR = varQual iX SLIT("range") +index_RDR = varQual iX SLIT("index") +inRange_RDR = varQual iX SLIT("inRange") + +readsPrec_RDR = varQual pREL_READ SLIT("readsPrec") +readList_RDR = varQual pREL_READ SLIT("readList") +readParen_RDR = varQual pREL_READ SLIT("readParen") +lex_RDR = varQual pREL_READ SLIT("lex") +readList___RDR = varQual pREL_READ SLIT("readList__") + +plus_RDR = varQual pREL_BASE SLIT("+") +times_RDR = varQual pREL_BASE SLIT("*") +mkInt_RDR = dataQual pREL_BASE SLIT("I#") + +error_RDR = varQual pREL_ERR SLIT("error") +assert_RDR = varQual pREL_GHC SLIT("assert") +assertErr_RDR = varQual pREL_ERR SLIT("assertError") eqH_Char_RDR = prelude_primop CharEqOp ltH_Char_RDR = prelude_primop CharLtOp @@ -561,6 +571,17 @@ leH_RDR = prelude_primop IntLeOp minusH_RDR = prelude_primop IntSubOp \end{code} +\begin{code} +mkTupConRdrName :: Int -> RdrName +mkTupConRdrName arity = case mkTupNameStr arity of + (mod, occ) -> dataQual mod occ + +mkUbxTupConRdrName :: Int -> RdrName +mkUbxTupConRdrName arity = case mkUbxTupNameStr arity of + (mod, occ) -> dataQual mod occ +\end{code} + + %************************************************************************ %* * \subsection[Class-std-groups]{Standard groups of Prelude classes} @@ -590,15 +611,20 @@ deriving_occ_info , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR]) -- EQ (from Ordering) is needed to force in the constructors -- as well as the type constructor. - , (enumClassKey, [intTyCon_RDR, map_RDR]) + , (enumClassKey, [intTyCon_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) + -- The last two Enum deps are only used to produce better + -- error msgs for derived toEnum methods. , (boundedClassKey, [intTyCon_RDR]) , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, showParen_RDR, showSpace_RDR, showList___RDR]) , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR, - lex_RDR, readParen_RDR, readList___RDR]) + lex_RDR, readParen_RDR, readList___RDR, thenM_RDR]) + -- returnM (and the rest of the Monad class decl) + -- will be forced in as result of depending + -- on thenM. -- SOF 1/99 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR, - returnM_RDR, zeroM_RDR]) - -- the last two are needed to force returnM, thenM and zeroM + returnM_RDR, failM_RDR]) + -- the last two are needed to force returnM, thenM and failM -- in before typechecking the list(monad) comprehension -- generated for derived Ix instances (range method) -- of single constructor types. -- SOF 8/97 @@ -680,3 +706,18 @@ noDictClassKeys -- These classes are used only for type annotations; -- they are not implemented by dictionaries, ever. = cCallishClassKeys \end{code} + + +%************************************************************************ +%* * +\subsection{Local helpers} +%* * +%************************************************************************ + +\begin{code} +varQual = mkPreludeQual varName +dataQual = mkPreludeQual dataName +tcQual = mkPreludeQual tcName +clsQual = mkPreludeQual clsName +\end{code} +