X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FPrelNames.lhs;h=4d834dfaacf99d7be12d94c00c9352121451a9f1;hb=ba2843abdfe6f055777e4e66e8add769fce31d29;hp=dafee0d3568a8c04d1062eb10928631cfadf9268;hpb=2145e55a4fbd60c3bd134496d82ddc545bd698ba;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/PrelNames.lhs b/ghc/compiler/prelude/PrelNames.lhs index dafee0d..4d834df 100644 --- a/ghc/compiler/prelude/PrelNames.lhs +++ b/ghc/compiler/prelude/PrelNames.lhs @@ -1,60 +1,73 @@ % % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 % -\section[PrelNames]{Definitions of prelude modules} +\section[PrelNames]{Definitions of prelude modules and names} -The strings identify built-in prelude modules. They are -defined here so as to avod -[oh dear, looks like the recursive module monster caught up with - and gobbled whoever was writing the above :-) -- SOF ] +Nota Bene: all Names defined in here should come from the base package + +* ModuleNames for prelude modules, + e.g. pREL_BASE_Name :: ModuleName + +* Modules for prelude modules + e.g. pREL_Base :: Module + +* Uniques for Ids, DataCons, TyCons and Classes that the compiler + "knows about" in some way + e.g. intTyConKey :: Unique + minusClassOpKey :: Unique + +* Names for Ids, DataCons, TyCons and Classes that the compiler + "knows about" in some way + e.g. intTyConName :: Name + minusName :: Name + One of these Names contains + (a) the module and occurrence name of the thing + (b) its Unique + The may way the compiler "knows about" one of these things is + where the type checker or desugarer needs to look it up. For + example, when desugaring list comprehensions the desugarer + needs to conjure up 'foldr'. It does this by looking up + foldrName in the environment. + +* RdrNames for Ids, DataCons etc that the compiler may emit into + generated code (e.g. for deriving). It's not necessary to know + the uniques for these guys, only their names + \begin{code} module PrelNames ( Unique, Uniquable(..), hasKey, -- Re-exported for convenience ----------------------------------------------------------- - module PrelNames, -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR - -- (b) Uniques e.g. intTyConKey + module PrelNames, -- A huge bunch of (a) Names, e.g. intTyConName + -- (b) Uniques e.g. intTyConKey + -- (c) Groups of classes and types + -- (d) miscellaneous things -- So many that we export them all - - ----------------------------------------------------------- - knownKeyNames, - mkTupNameStr, mkTupConRdrName, - - ------------------------------------------------------------ - -- Goups of classes and types - needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys, - fractionalClassKeys, numericClassKeys, standardClassKeys, - derivingOccurrences, -- For a given class C, this tells what other - derivableClassKeys, -- things are needed as a result of a - -- deriving(C) clause - numericTyKeys, cCallishTyKeys, - - mkUnboundName, isUnboundName ) where #include "HsVersions.h" -import Module ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName ) -import OccName ( NameSpace, UserFS, varName, dataName, tcName, clsName, +import Module ( ModuleName, mkBasePkgModule, mkHomeModule, mkModuleName ) +import OccName ( UserFS, dataName, tcName, clsName, varName, mkKindOccFS, mkOccFS ) -import RdrName ( RdrName, mkOrig, mkUnqual ) -import UniqFM + +import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc ) import Unique ( Unique, Uniquable(..), hasKey, mkPreludeMiscIdUnique, mkPreludeDataConUnique, mkPreludeTyConUnique, mkPreludeClassUnique, - mkTupleTyConUnique + mkTupleTyConUnique, isTupleKey ) -import BasicTypes ( Boxity(..), Arity ) -import UniqFM ( UniqFM, listToUFM ) -import Name ( Name, mkInternalName, mkKnownKeyExternalName, nameRdrName ) -import RdrName ( rdrNameOcc ) -import SrcLoc ( builtinSrcLoc, noSrcLoc ) +import BasicTypes ( Boxity(..) ) +import Name ( Name, mkInternalName, mkKnownKeyExternalName, mkWiredInName, nameUnique ) +import SrcLoc ( noSrcLoc ) import Util ( nOfThem ) import Panic ( panic ) import FastString + + \end{code} @@ -74,7 +87,7 @@ itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly -- during compiler debugging. mkUnboundName :: RdrName -> Name -mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc +mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc isUnboundName :: Name -> Bool isUnboundName name = name `hasKey` unboundKey @@ -83,6 +96,25 @@ isUnboundName name = name `hasKey` unboundKey %************************************************************************ %* * +\subsection{Built-in-syntax names +%* * +%************************************************************************ + +Built-in syntax names are parsed directly into Exact RdrNames. +This predicate just identifies them. + +\begin{code} +isBuiltInSyntaxName :: Name -> Bool +isBuiltInSyntaxName n + = isTupleKey uniq + || uniq `elem` [listTyConKey, nilDataConKey, consDataConKey, + funTyConKey, parrTyConKey] + where + uniq = nameUnique n +\end{code} + +%************************************************************************ +%* * \subsection{Known key Names} %* * %************************************************************************ @@ -92,23 +124,18 @@ names with uniques. These ones are the *non* wired-in ones. The wired in ones are defined in TysWiredIn etc. \begin{code} -knownKeyNames :: [Name] -knownKeyNames - = [ - -- Type constructors (synonyms especially) +basicKnownKeyNames :: [Name] +basicKnownKeyNames + = [ -- Type constructors (synonyms especially) ioTyConName, ioDataConName, - runMainName, + runIOName, orderingTyConName, rationalTyConName, ratioDataConName, ratioTyConName, byteArrayTyConName, mutableByteArrayTyConName, - foreignObjTyConName, - foreignPtrTyConName, bcoPrimTyConName, - stablePtrTyConName, - stablePtrDataConName, -- Classes. *Must* include: -- classes that are grabbed by key (e.g., eqClassKey) @@ -120,102 +147,88 @@ knownKeyNames enumClassName, -- derivable monadClassName, functorClassName, - showClassName, -- derivable realClassName, -- numeric integralClassName, -- numeric fractionalClassName, -- numeric floatingClassName, -- numeric realFracClassName, -- numeric realFloatClassName, -- numeric - readClassName, -- derivable - ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm) cCallableClassName, -- mentioned, ccallish cReturnableClassName, -- mentioned, ccallish - - -- ClassOps - fromIntegerName, - negateName, - geName, - minusName, - enumFromName, - enumFromThenName, - enumFromToName, - enumFromThenToName, - fromEnumName, - toEnumName, - eqName, - thenMName, - bindMName, - returnMName, - failMName, - fromRationalName, - - -- not class methods, but overloaded (for parallel arrays) - enumFromToPName, - enumFromThenToPName, - - deRefStablePtrName, + dataClassName, + typeableClassName, + + -- Numeric stuff + negateName, minusName, + fromRationalName, fromIntegerName, + geName, eqName, + + -- Enum stuff + enumFromName, enumFromThenName, + enumFromThenToName, enumFromToName, + enumFromToPName, enumFromThenToPName, + + -- Monad stuff + thenMName, bindMName, returnMName, failMName, + thenIOName, bindIOName, returnIOName, failIOName, + + -- MonadRec stuff + mfixName, + + -- Arrow stuff + arrAName, composeAName, firstAName, + appAName, choiceAName, loopAName, + + -- Ix stuff + ixClassName, + + -- Show stuff + showClassName, + + -- Read stuff + readClassName, + + -- Stable pointers newStablePtrName, - bindIOName, - thenIOName, - returnIOName, - failIOName, -- Strings and lists - mapName, - appendName, - unpackCStringName, - unpackCStringAppendName, - unpackCStringFoldrName, - unpackCStringUtf8Name, + unpackCStringName, unpackCStringAppendName, + unpackCStringFoldrName, unpackCStringUtf8Name, -- List operations - concatName, - filterName, - zipName, - foldrName, - buildName, - augmentName, + concatName, filterName, + zipName, foldrName, buildName, augmentName, appendName, -- Parallel array operations - nullPName, - lengthPName, - replicatePName, - mapPName, - filterPName, - zipPName, - crossPName, - indexPName, - toPName, - bpermutePName, - bpermuteDftPName, - indexOfPName, + nullPName, lengthPName, replicatePName, mapPName, + filterPName, zipPName, crossPName, indexPName, + toPName, bpermutePName, bpermuteDftPName, indexOfPName, -- FFI primitive types that are not wired-in. - int8TyConName, - int16TyConName, - int32TyConName, - int64TyConName, - word8TyConName, - word16TyConName, - word32TyConName, - word64TyConName, + stablePtrTyConName, ptrTyConName, funPtrTyConName, addrTyConName, + int8TyConName, int16TyConName, int32TyConName, int64TyConName, + word8TyConName, word16TyConName, word32TyConName, word64TyConName, -- Others - unsafeCoerceName, - otherwiseIdName, - plusIntegerName, - timesIntegerName, - eqStringName, - assertName, - runSTRepName, - printName, - splitName, fstName, sndName, -- Used by splittery - - -- Others (needed for flattening and not mentioned before) - andName, - orName + unsafeCoerceName, otherwiseIdName, + plusIntegerName, timesIntegerName, + eqStringName, assertName, assertErrorName, runSTRepName, + printName, splitName, fstName, sndName, + errorName, + + -- Booleans + andName, orName + + -- The Either type + , eitherTyConName, leftDataConName, rightDataConName + + -- dotnet interop + , objectTyConName, marshalObjectName, unmarshalObjectName + , marshalStringName, unmarshalStringName, checkDotnetResName ] + +monadNames :: [Name] -- The monad ops need by a HsDo +monadNames = [returnMName, failMName, bindMName, thenMName] \end{code} @@ -225,6 +238,8 @@ knownKeyNames %* * %************************************************************************ + +--MetaHaskell Extension Add a new module here \begin{code} pRELUDE_Name = mkModuleName "Prelude" gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values @@ -236,13 +251,13 @@ pREL_NUM_Name = mkModuleName "GHC.Num" pREL_LIST_Name = mkModuleName "GHC.List" pREL_PARR_Name = mkModuleName "GHC.PArr" pREL_TUP_Name = mkModuleName "Data.Tuple" +pREL_EITHER_Name = mkModuleName "Data.Either" pREL_PACK_Name = mkModuleName "GHC.Pack" pREL_CONC_Name = mkModuleName "GHC.Conc" pREL_IO_BASE_Name = mkModuleName "GHC.IOBase" pREL_ST_Name = mkModuleName "GHC.ST" pREL_ARR_Name = mkModuleName "GHC.Arr" pREL_BYTEARR_Name = mkModuleName "PrelByteArr" -fOREIGN_PTR_Name = mkModuleName "Foreign.ForeignPtr" pREL_STABLE_Name = mkModuleName "GHC.Stable" pREL_ADDR_Name = mkModuleName "GHC.Addr" pREL_PTR_Name = mkModuleName "GHC.Ptr" @@ -251,6 +266,10 @@ pREL_REAL_Name = mkModuleName "GHC.Real" pREL_FLOAT_Name = mkModuleName "GHC.Float" pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler" sYSTEM_IO_Name = mkModuleName "System.IO" +dYNAMIC_Name = mkModuleName "Data.Dynamic" +tYPEABLE_Name = mkModuleName "Data.Typeable" +gENERICS_Name = mkModuleName "Data.Generics" +dOTNET_Name = mkModuleName "GHC.Dotnet" rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec" lEX_Name = mkModuleName "Text.Read.Lex" @@ -258,26 +277,35 @@ lEX_Name = mkModuleName "Text.Read.Lex" mAIN_Name = mkModuleName "Main" pREL_INT_Name = mkModuleName "GHC.Int" pREL_WORD_Name = mkModuleName "GHC.Word" - -fOREIGNOBJ_Name = mkModuleName "ForeignObj" +mONAD_FIX_Name = mkModuleName "Control.Monad.Fix" +aRROW_Name = mkModuleName "Control.Arrow" aDDR_Name = mkModuleName "Addr" gLA_EXTS_Name = mkModuleName "GHC.Exts" -gHC_PRIM = mkPrelModule gHC_PRIM_Name -pREL_BASE = mkPrelModule pREL_BASE_Name -pREL_ADDR = mkPrelModule pREL_ADDR_Name -pREL_PTR = mkPrelModule pREL_PTR_Name -pREL_STABLE = mkPrelModule pREL_STABLE_Name -pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name -pREL_PACK = mkPrelModule pREL_PACK_Name -pREL_ERR = mkPrelModule pREL_ERR_Name -pREL_NUM = mkPrelModule pREL_NUM_Name -pREL_REAL = mkPrelModule pREL_REAL_Name -pREL_FLOAT = mkPrelModule pREL_FLOAT_Name -pRELUDE = mkPrelModule pRELUDE_Name - -iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive") +gHC_PRIM = mkBasePkgModule gHC_PRIM_Name +pREL_BASE = mkBasePkgModule pREL_BASE_Name +pREL_ADDR = mkBasePkgModule pREL_ADDR_Name +pREL_PTR = mkBasePkgModule pREL_PTR_Name +pREL_STABLE = mkBasePkgModule pREL_STABLE_Name +pREL_IO_BASE = mkBasePkgModule pREL_IO_BASE_Name +pREL_PACK = mkBasePkgModule pREL_PACK_Name +pREL_ERR = mkBasePkgModule pREL_ERR_Name +pREL_NUM = mkBasePkgModule pREL_NUM_Name +pREL_REAL = mkBasePkgModule pREL_REAL_Name +pREL_FLOAT = mkBasePkgModule pREL_FLOAT_Name +pRELUDE = mkBasePkgModule pRELUDE_Name + +-- MetaHaskell Extension text2 from Meta/work/gen.hs +mETA_META_Name = mkModuleName "Language.Haskell.THSyntax" + +rOOT_MAIN_Name = mkModuleName ":Main" -- Root module for initialisation +rOOT_MAIN = mkHomeModule rOOT_MAIN_Name + -- The ':xxx' makes a moudle name that the user can never + -- use himself. The z-encoding for ':' is "ZC", so the z-encoded + -- module name still starts with a capital letter, which keeps + -- the z-encoded version consistent. +iNTERACTIVE = mkHomeModule (mkModuleName ":Interactive") \end{code} %************************************************************************ @@ -302,31 +330,142 @@ mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, mkFastString "(#,#)") mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, mkFastString "(#,,#)") mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, mkFastString "(#,,,#)") mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ nOfThem (n-1) ',' ++ "#)")) - -mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName -mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of - (mod, occ) -> mkOrig space mod occ \end{code} %************************************************************************ %* * -\subsection{Unqualified RdrNames} + RdrNames %* * %************************************************************************ \begin{code} -main_RDR_Unqual :: RdrName -main_RDR_Unqual = mkUnqual varName FSLIT("main") --- Don't get a RdrName from PrelNames.mainName, because nameRdrName --- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual --- one will do fine. +eq_RDR = nameRdrName eqName +ge_RDR = nameRdrName geName +ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=") +le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=") +gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">") +compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare") +ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT") +eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ") +gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT") + +eqClass_RDR = nameRdrName eqClassName +numClass_RDR = nameRdrName numClassName +ordClass_RDR = nameRdrName ordClassName +enumClass_RDR = nameRdrName enumClassName +monadClass_RDR = nameRdrName monadClassName +cCallableClass_RDR = nameRdrName cCallableClassName +cReturnableClass_RDR = nameRdrName cReturnableClassName + +map_RDR = varQual_RDR pREL_BASE_Name FSLIT("map") +append_RDR = varQual_RDR pREL_BASE_Name FSLIT("++") + +foldr_RDR = nameRdrName foldrName +build_RDR = nameRdrName buildName +returnM_RDR = nameRdrName returnMName +bindM_RDR = nameRdrName bindMName +failM_RDR = nameRdrName failMName + +false_RDR = nameRdrName falseDataConName +true_RDR = nameRdrName trueDataConName +and_RDR = nameRdrName andName + +left_RDR = nameRdrName leftDataConName +right_RDR = nameRdrName rightDataConName + +error_RDR = nameRdrName errorName + +fromEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("fromEnum") +toEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("toEnum") +mkInt_RDR = nameRdrName intDataConName + +enumFrom_RDR = nameRdrName enumFromName +enumFromTo_RDR = nameRdrName enumFromToName +enumFromThen_RDR = nameRdrName enumFromThenName +enumFromThenTo_RDR = nameRdrName enumFromThenToName + +ratioDataCon_RDR = nameRdrName ratioDataConName +plusInteger_RDR = nameRdrName plusIntegerName +timesInteger_RDR = nameRdrName timesIntegerName + +ioDataCon_RDR = nameRdrName ioDataConName + +eqString_RDR = nameRdrName eqStringName +unpackCString_RDR = nameRdrName unpackCStringName +unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName +unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name + +newStablePtr_RDR = nameRdrName newStablePtrName +addrDataCon_RDR = dataQual_RDR aDDR_Name FSLIT("A#") + +bindIO_RDR = nameRdrName bindIOName +returnIO_RDR = nameRdrName returnIOName + +fromInteger_RDR = nameRdrName fromIntegerName +fromRational_RDR = nameRdrName fromRationalName +minus_RDR = nameRdrName minusName +times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*") +plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+") + +compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".") + +not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not") +getTag_RDR = varQual_RDR pREL_BASE_Name FSLIT("getTag") +succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ") +pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred") +minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound") +maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound") +range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range") +inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange") +index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index") + +readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList") +readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault") +readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec") +readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault") +readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec") +parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens") +choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose") +lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP") + +punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc") +ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident") +symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol") + +step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step") +alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++") +reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset") +prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec") + +showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList") +showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__") +showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec") +showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString") +showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace") +showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen") + +typeOf_RDR = varQual_RDR tYPEABLE_Name FSLIT("typeOf") +mkTypeRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkAppTy") +mkTyConRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkTyCon") + +constr_RDR = dataQual_RDR gENERICS_Name FSLIT("Constr") +gfoldl_RDR = varQual_RDR gENERICS_Name FSLIT("gfoldl") +gfoldr_RDR = varQual_RDR gENERICS_Name FSLIT("gfoldr") +gunfold_RDR = varQual_RDR gENERICS_Name FSLIT("gunfold") +gmapT_RDR = varQual_RDR gENERICS_Name FSLIT("gmapT") +gmapQ_RDR = varQual_RDR gENERICS_Name FSLIT("gmapQ") +gmapM_RDR = varQual_RDR gENERICS_Name FSLIT("gmapM") +conOf_RDR = varQual_RDR gENERICS_Name FSLIT("conOf") +consOf_RDR = varQual_RDR gENERICS_Name FSLIT("consOf") + +undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined") \end{code} %************************************************************************ %* * -\subsection{Commonly-used RdrNames} +\subsection{Known-key names} %* * %************************************************************************ @@ -334,19 +473,20 @@ Many of these Names are not really "built in", but some parts of the compiler (notably the deriving mechanism) need to mention their names, and it's convenient to write them all down in one place. +--MetaHaskell Extension add the constrs and the lower case case +-- guys as well (perhaps) e.g. see trueDataConName below + + \begin{code} -dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey -runMainName = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey +rootMainName = varQual rOOT_MAIN_Name FSLIT("main") rootMainKey +runIOName = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey -- Stuff from GHC.Prim -usOnceTyConName = kindQual FSLIT(".") usOnceTyConKey -usManyTyConName = kindQual FSLIT("!") usManyTyConKey superKindName = kindQual FSLIT("KX") kindConKey superBoxityName = kindQual FSLIT("BX") boxityConKey liftedConName = kindQual FSLIT("*") liftedConKey unliftedConName = kindQual FSLIT("#") unliftedConKey openKindConName = kindQual FSLIT("?") anyBoxConKey -usageKindConName = kindQual FSLIT("$") usageConKey typeConName = kindQual FSLIT("Type") typeConKey funTyConName = tcQual gHC_PRIM_Name FSLIT("(->)") funTyConKey @@ -377,56 +517,50 @@ threadIdPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ThreadId#") threadI cCallableClassName = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey cReturnableClassName = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey +unsafeCoerceName = wVarQual gHC_PRIM_Name FSLIT("unsafeCoerce#") unsafeCoerceIdKey +nullAddrName = wVarQual gHC_PRIM_Name FSLIT("nullAddr#") nullAddrIdKey +seqName = wVarQual gHC_PRIM_Name FSLIT("seq") seqIdKey +realWorldName = wVarQual gHC_PRIM_Name FSLIT("realWorld#") realWorldPrimIdKey + -- PrelBase data types and constructors -charTyConName = tcQual pREL_BASE_Name FSLIT("Char") charTyConKey -charDataConName = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey -intTyConName = tcQual pREL_BASE_Name FSLIT("Int") intTyConKey -intDataConName = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey +charTyConName = wTcQual pREL_BASE_Name FSLIT("Char") charTyConKey +charDataConName = wDataQual pREL_BASE_Name FSLIT("C#") charDataConKey +intTyConName = wTcQual pREL_BASE_Name FSLIT("Int") intTyConKey +intDataConName = wDataQual pREL_BASE_Name FSLIT("I#") intDataConKey orderingTyConName = tcQual pREL_BASE_Name FSLIT("Ordering") orderingTyConKey -boolTyConName = tcQual pREL_BASE_Name FSLIT("Bool") boolTyConKey -falseDataConName = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey -trueDataConName = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey -listTyConName = tcQual pREL_BASE_Name FSLIT("[]") listTyConKey -nilDataConName = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey -consDataConName = dataQual pREL_BASE_Name FSLIT(":") consDataConKey +boolTyConName = wTcQual pREL_BASE_Name FSLIT("Bool") boolTyConKey +falseDataConName = wDataQual pREL_BASE_Name FSLIT("False") falseDataConKey +trueDataConName = wDataQual pREL_BASE_Name FSLIT("True") trueDataConKey +listTyConName = wTcQual pREL_BASE_Name FSLIT("[]") listTyConKey +nilDataConName = wDataQual pREL_BASE_Name FSLIT("[]") nilDataConKey +consDataConName = wDataQual pREL_BASE_Name FSLIT(":") consDataConKey +eqName = varQual pREL_BASE_Name FSLIT("==") eqClassOpKey +geName = varQual pREL_BASE_Name FSLIT(">=") geClassOpKey --- PrelTup -fstName = varQual pREL_TUP_Name FSLIT("fst") fstIdKey -sndName = varQual pREL_TUP_Name FSLIT("snd") sndIdKey +eitherTyConName = tcQual pREL_EITHER_Name FSLIT("Either") eitherTyConKey +leftDataConName = dataQual pREL_EITHER_Name FSLIT("Left") leftDataConKey +rightDataConName = dataQual pREL_EITHER_Name FSLIT("Right") rightDataConKey -- Generics crossTyConName = tcQual pREL_BASE_Name FSLIT(":*:") crossTyConKey crossDataConName = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey -plusTyConName = tcQual pREL_BASE_Name FSLIT(":+:") plusTyConKey -inlDataConName = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey -inrDataConName = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey -genUnitTyConName = tcQual pREL_BASE_Name FSLIT("Unit") genUnitTyConKey -genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey - --- Random PrelBase functions -unsafeCoerceName = varQual pREL_BASE_Name FSLIT("unsafeCoerce") - unsafeCoerceIdKey -otherwiseIdName = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey -appendName = varQual pREL_BASE_Name FSLIT("++") appendIdKey -foldrName = varQual pREL_BASE_Name FSLIT("foldr") foldrIdKey -mapName = varQual pREL_BASE_Name FSLIT("map") mapIdKey -buildName = varQual pREL_BASE_Name FSLIT("build") buildIdKey -augmentName = varQual pREL_BASE_Name FSLIT("augment") augmentIdKey -eqStringName = varQual pREL_BASE_Name FSLIT("eqString") eqStringIdKey -andName = varQual pREL_BASE_Name FSLIT("&&") andIdKey -orName = varQual pREL_BASE_Name FSLIT("||") orIdKey +plusTyConName = wTcQual pREL_BASE_Name FSLIT(":+:") plusTyConKey +inlDataConName = wDataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey +inrDataConName = wDataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey +genUnitTyConName = wTcQual pREL_BASE_Name FSLIT("Unit") genUnitTyConKey +genUnitDataConName = wDataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey --- Strings +-- Base strings Strings unpackCStringName = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey unpackCStringFoldrName = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey unpackCStringUtf8Name = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey +eqStringName = varQual pREL_BASE_Name FSLIT("eqString") eqStringIdKey --- Classes Eq and Ord +-- Base classes (Eq, Ord, Functor) eqClassName = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey +functorClassName = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey ordClassName = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey -eqName = varQual pREL_BASE_Name FSLIT("==") eqClassOpKey -geName = varQual pREL_BASE_Name FSLIT(">=") geClassOpKey -- Class Monad monadClassName = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey @@ -435,14 +569,21 @@ bindMName = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey returnMName = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey failMName = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey --- Class Functor -functorClassName = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey --- Class Show -showClassName = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey +-- Random PrelBase functions +otherwiseIdName = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey +foldrName = varQual pREL_BASE_Name FSLIT("foldr") foldrIdKey +buildName = varQual pREL_BASE_Name FSLIT("build") buildIdKey +augmentName = varQual pREL_BASE_Name FSLIT("augment") augmentIdKey +appendName = varQual pREL_BASE_Name FSLIT("++") appendIdKey +andName = varQual pREL_BASE_Name FSLIT("&&") andIdKey +orName = varQual pREL_BASE_Name FSLIT("||") orIdKey +assertName = varQual pREL_BASE_Name FSLIT("assert") assertIdKey +lazyIdName = wVarQual pREL_BASE_Name FSLIT("lazy") lazyIdKey --- Class Read -readClassName = clsQual pREL_READ_Name FSLIT("Read") readClassKey +-- PrelTup +fstName = varQual pREL_TUP_Name FSLIT("fst") fstIdKey +sndName = varQual pREL_TUP_Name FSLIT("snd") sndIdKey -- Module PrelNum numClassName = clsQual pREL_NUM_Name FSLIT("Num") numClassKey @@ -451,9 +592,9 @@ minusName = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey negateName = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey plusIntegerName = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey timesIntegerName = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey -integerTyConName = tcQual pREL_NUM_Name FSLIT("Integer") integerTyConKey -smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey -largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey +integerTyConName = wTcQual pREL_NUM_Name FSLIT("Integer") integerTyConKey +smallIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey +largeIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey -- PrelReal types and classes rationalTyConName = tcQual pREL_REAL_Name FSLIT("Rational") rationalTyConKey @@ -466,30 +607,26 @@ fractionalClassName = clsQual pREL_REAL_Name FSLIT("Fractional") fractionalCla fromRationalName = varQual pREL_REAL_Name FSLIT("fromRational") fromRationalClassOpKey -- PrelFloat classes -floatTyConName = tcQual pREL_FLOAT_Name FSLIT("Float") floatTyConKey -floatDataConName = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey -doubleTyConName = tcQual pREL_FLOAT_Name FSLIT("Double") doubleTyConKey -doubleDataConName = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey +floatTyConName = wTcQual pREL_FLOAT_Name FSLIT("Float") floatTyConKey +floatDataConName = wDataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey +doubleTyConName = wTcQual pREL_FLOAT_Name FSLIT("Double") doubleTyConKey +doubleDataConName = wDataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey floatingClassName = clsQual pREL_FLOAT_Name FSLIT("Floating") floatingClassKey realFloatClassName = clsQual pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey -- Class Ix ixClassName = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey --- Class Enum +-- Class Typeable and Data +typeableClassName = clsQual tYPEABLE_Name FSLIT("Typeable") typeableClassKey +dataClassName = clsQual gENERICS_Name FSLIT("Data") dataClassKey + +-- Enum module (Enum, Bounded) enumClassName = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey -toEnumName = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey -fromEnumName = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey enumFromName = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey enumFromToName = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey enumFromThenName = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey - --- Overloaded via Class Enum -enumFromToPName = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey -enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey - --- Class Bounded boundedClassName = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey -- List functions @@ -497,22 +634,29 @@ concatName = varQual pREL_LIST_Name FSLIT("concat") concatIdKey filterName = varQual pREL_LIST_Name FSLIT("filter") filterIdKey zipName = varQual pREL_LIST_Name FSLIT("zip") zipIdKey +-- Class Show +showClassName = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey + +-- Class Read +readClassName = clsQual pREL_READ_Name FSLIT("Read") readClassKey + -- parallel array types and functions -parrTyConName = tcQual pREL_PARR_Name FSLIT("[::]") parrTyConKey -parrDataConName = dataQual pREL_PARR_Name FSLIT("PArr") parrDataConKey -nullPName = varQual pREL_PARR_Name FSLIT("nullP") nullPIdKey -lengthPName = varQual pREL_PARR_Name FSLIT("lengthP") lengthPIdKey -replicatePName = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey -mapPName = varQual pREL_PARR_Name FSLIT("mapP") mapPIdKey -filterPName = varQual pREL_PARR_Name FSLIT("filterP") filterPIdKey -zipPName = varQual pREL_PARR_Name FSLIT("zipP") zipPIdKey -crossPName = varQual pREL_PARR_Name FSLIT("crossP") crossPIdKey -indexPName = varQual pREL_PARR_Name FSLIT("!:") indexPIdKey -toPName = varQual pREL_PARR_Name FSLIT("toP") toPIdKey -bpermutePName = varQual pREL_PARR_Name FSLIT("bpermuteP") bpermutePIdKey -bpermuteDftPName = varQual pREL_PARR_Name FSLIT("bpermuteDftP") - bpermuteDftPIdKey -indexOfPName = varQual pREL_PARR_Name FSLIT("indexOfP") indexOfPIdKey +enumFromToPName = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey +enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey +parrTyConName = wTcQual pREL_PARR_Name FSLIT("[::]") parrTyConKey +parrDataConName = wDataQual pREL_PARR_Name FSLIT("PArr") parrDataConKey +nullPName = varQual pREL_PARR_Name FSLIT("nullP") nullPIdKey +lengthPName = varQual pREL_PARR_Name FSLIT("lengthP") lengthPIdKey +replicatePName = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey +mapPName = varQual pREL_PARR_Name FSLIT("mapP") mapPIdKey +filterPName = varQual pREL_PARR_Name FSLIT("filterP") filterPIdKey +zipPName = varQual pREL_PARR_Name FSLIT("zipP") zipPIdKey +crossPName = varQual pREL_PARR_Name FSLIT("crossP") crossPIdKey +indexPName = varQual pREL_PARR_Name FSLIT("!:") indexPIdKey +toPName = varQual pREL_PARR_Name FSLIT("toP") toPIdKey +bpermutePName = varQual pREL_PARR_Name FSLIT("bpermuteP") bpermutePIdKey +bpermuteDftPName = varQual pREL_PARR_Name FSLIT("bpermuteDftP") bpermuteDftPIdKey +indexOfPName = varQual pREL_PARR_Name FSLIT("indexOfP") indexOfPIdKey -- IOBase things ioTyConName = tcQual pREL_IO_BASE_Name FSLIT("IO") ioTyConKey @@ -531,179 +675,66 @@ int16TyConName = tcQual pREL_INT_Name FSLIT("Int16") int16TyConKey int32TyConName = tcQual pREL_INT_Name FSLIT("Int32") int32TyConKey int64TyConName = tcQual pREL_INT_Name FSLIT("Int64") int64TyConKey -word8TyConName = tcQual pREL_WORD_Name FSLIT("Word8") word8TyConKey -word16TyConName = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey -word32TyConName = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey -word64TyConName = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey - -wordTyConName = tcQual pREL_WORD_Name FSLIT("Word") wordTyConKey -wordDataConName = dataQual pREL_WORD_Name FSLIT("W#") wordDataConKey +-- Word module +word8TyConName = tcQual pREL_WORD_Name FSLIT("Word8") word8TyConKey +word16TyConName = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey +word32TyConName = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey +word64TyConName = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey +wordTyConName = wTcQual pREL_WORD_Name FSLIT("Word") wordTyConKey +wordDataConName = wDataQual pREL_WORD_Name FSLIT("W#") wordDataConKey +-- Addr module addrTyConName = tcQual aDDR_Name FSLIT("Addr") addrTyConKey -addrDataConName = dataQual aDDR_Name FSLIT("A#") addrDataConKey +-- PrelPtr module ptrTyConName = tcQual pREL_PTR_Name FSLIT("Ptr") ptrTyConKey -ptrDataConName = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey - funPtrTyConName = tcQual pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey -funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey -- Byte array types byteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("ByteArray") byteArrayTyConKey mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("MutableByteArray") mutableByteArrayTyConKey -- Foreign objects and weak pointers -foreignObjTyConName = tcQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjTyConKey -foreignObjDataConName = dataQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjDataConKey -foreignPtrTyConName = tcQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrTyConKey -foreignPtrDataConName = dataQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrDataConKey stablePtrTyConName = tcQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey -stablePtrDataConName = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey -deRefStablePtrName = varQual pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey newStablePtrName = varQual pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey -assertName = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey -getTagName = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey - -errorName = varQual pREL_ERR_Name FSLIT("error") errorIdKey +-- Error module +errorName = wVarQual pREL_ERR_Name FSLIT("error") errorIdKey +assertErrorName = wVarQual pREL_ERR_Name FSLIT("assertError") assertErrorIdKey +recSelErrorName = wVarQual pREL_ERR_Name FSLIT("recSelError") recSelErrorIdKey +runtimeErrorName = wVarQual pREL_ERR_Name FSLIT("runtimeError") runtimeErrorIdKey +irrefutPatErrorName = wVarQual pREL_ERR_Name FSLIT("irrefutPatError") irrefutPatErrorIdKey +recConErrorName = wVarQual pREL_ERR_Name FSLIT("recConError") recConErrorIdKey +patErrorName = wVarQual pREL_ERR_Name FSLIT("patError") patErrorIdKey +noMethodBindingErrorName = wVarQual pREL_ERR_Name FSLIT("noMethodBindingError") noMethodBindingErrorIdKey +nonExhaustiveGuardsErrorName + = wVarQual pREL_ERR_Name FSLIT("nonExhaustiveGuardsError") nonExhaustiveGuardsErrorIdKey + +-- PrelST module runSTRepName = varQual pREL_ST_Name FSLIT("runSTRep") runSTRepIdKey -- The "split" Id for splittable implicit parameters splitName = varQual gLA_EXTS_Name FSLIT("split") splitIdKey -\end{code} - -%************************************************************************ -%* * -\subsection{Known names} -%* * -%************************************************************************ - -The following names are known to the compiler, but they don't require -pre-assigned keys. Mostly these names are used in generating deriving -code, which is passed through the renamer anyway. - THEY ARE ALL ORIGINAL NAMES, HOWEVER +-- Recursive-do notation +mfixName = varQual mONAD_FIX_Name FSLIT("mfix") mfixIdKey + +-- Arrow notation +arrAName = varQual aRROW_Name FSLIT("arr") arrAIdKey +composeAName = varQual aRROW_Name FSLIT(">>>") composeAIdKey +firstAName = varQual aRROW_Name FSLIT("first") firstAIdKey +appAName = varQual aRROW_Name FSLIT("app") appAIdKey +choiceAName = varQual aRROW_Name FSLIT("|||") choiceAIdKey +loopAName = varQual aRROW_Name FSLIT("loop") loopAIdKey + +-- dotnet interop +objectTyConName = wTcQual dOTNET_Name FSLIT("Object") objectTyConKey +unmarshalObjectName = varQual dOTNET_Name FSLIT("unmarshalObject") unmarshalObjectIdKey +marshalObjectName = varQual dOTNET_Name FSLIT("marshalObject") marshalObjectIdKey +marshalStringName = varQual dOTNET_Name FSLIT("marshalString") marshalStringIdKey +unmarshalStringName = varQual dOTNET_Name FSLIT("unmarshalString") unmarshalStringIdKey +checkDotnetResName = varQual dOTNET_Name FSLIT("checkResult") checkDotnetResNameIdKey -\begin{code} --- Lists and tuples -tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName -ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName - -tupleCon_RDR = mkTupConRdrName dataName Boxed -tupleTyCon_RDR = mkTupConRdrName tcName Boxed -ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed -ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed - -unitCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("()") -unitTyCon_RDR = tcQual_RDR pREL_BASE_Name FSLIT("()") - -and_RDR = varQual_RDR pREL_BASE_Name FSLIT("&&") -not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not") -compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".") -ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=") -le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=") -lt_RDR = varQual_RDR pREL_BASE_Name FSLIT("<") -gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">") -ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT") -eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ") -gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT") -max_RDR = varQual_RDR pREL_BASE_Name FSLIT("max") -min_RDR = varQual_RDR pREL_BASE_Name FSLIT("min") -compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare") -showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList") -showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__") -showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec") -showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace") -showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString") -showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen") - -readsPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readsPrec") -readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec") -readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec") -readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList") - -readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault") -readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault") -parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens") -choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose") -lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP") - --- Module ReadPrec -step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step") -reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset") -alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++") -prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec") - --- Module Lex -symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol") -ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident") -punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc") - -times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*") -plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+") -negate_RDR = varQual_RDR pREL_NUM_Name FSLIT("negate") -range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range") -index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index") -inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange") -succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ") -pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred") -minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound") -maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound") -assertErr_RDR = varQual_RDR pREL_ERR_Name FSLIT("assertError") -\end{code} - -These RDR names also have known keys, so we need to get back the RDR names to -populate the occurrence list above. - -\begin{code} -funTyCon_RDR = nameRdrName funTyConName -nilCon_RDR = nameRdrName nilDataConName -listTyCon_RDR = nameRdrName listTyConName -parrTyCon_RDR = nameRdrName parrTyConName -ioTyCon_RDR = nameRdrName ioTyConName -intTyCon_RDR = nameRdrName intTyConName -eq_RDR = nameRdrName eqName -ge_RDR = nameRdrName geName -numClass_RDR = nameRdrName numClassName -ordClass_RDR = nameRdrName ordClassName -map_RDR = nameRdrName mapName -append_RDR = nameRdrName appendName -foldr_RDR = nameRdrName foldrName -build_RDR = nameRdrName buildName -enumFromTo_RDR = nameRdrName enumFromToName -returnM_RDR = nameRdrName returnMName -bindM_RDR = nameRdrName bindMName -failM_RDR = nameRdrName failMName -false_RDR = nameRdrName falseDataConName -true_RDR = nameRdrName trueDataConName -error_RDR = nameRdrName errorName -getTag_RDR = nameRdrName getTagName -fromEnum_RDR = nameRdrName fromEnumName -toEnum_RDR = nameRdrName toEnumName -enumFrom_RDR = nameRdrName enumFromName -mkInt_RDR = nameRdrName intDataConName -enumFromThen_RDR = nameRdrName enumFromThenName -enumFromThenTo_RDR = nameRdrName enumFromThenToName -ratioDataCon_RDR = nameRdrName ratioDataConName -plusInteger_RDR = nameRdrName plusIntegerName -timesInteger_RDR = nameRdrName timesIntegerName -enumClass_RDR = nameRdrName enumClassName -monadClass_RDR = nameRdrName monadClassName -ioDataCon_RDR = nameRdrName ioDataConName -cCallableClass_RDR = nameRdrName cCallableClassName -cReturnableClass_RDR = nameRdrName cReturnableClassName -eqClass_RDR = nameRdrName eqClassName -eqString_RDR = nameRdrName eqStringName -unpackCString_RDR = nameRdrName unpackCStringName -unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName -unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name -deRefStablePtr_RDR = nameRdrName deRefStablePtrName -newStablePtr_RDR = nameRdrName newStablePtrName -bindIO_RDR = nameRdrName bindIOName -returnIO_RDR = nameRdrName returnIOName -fromInteger_RDR = nameRdrName fromIntegerName -fromRational_RDR = nameRdrName fromRationalName -minus_RDR = nameRdrName minusName \end{code} %************************************************************************ @@ -715,20 +746,30 @@ minus_RDR = nameRdrName minusName All these are original names; hence mkOrig \begin{code} -varQual mod str uq = mkKnownKeyExternalName (varQual_RDR mod str) uq -dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq -tcQual mod str uq = mkKnownKeyExternalName (tcQual_RDR mod str) uq -clsQual mod str uq = mkKnownKeyExternalName (clsQual_RDR mod str) uq - -kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) builtinSrcLoc +varQual = mk_known_key_name varName +dataQual = mk_known_key_name dataName -- All the constructor names here are for the DataCon + -- itself, which lives in the VarName name space +tcQual = mk_known_key_name tcName +clsQual = mk_known_key_name clsName + +wVarQual = mk_wired_in_name varName -- The wired-in analogues +wDataQual = mk_wired_in_name dataName +wTcQual = mk_wired_in_name tcName + +varQual_RDR mod str = mkOrig mod (mkOccFS varName str) -- The RDR analogues +dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str) +tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str) +clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str) + +mk_known_key_name space mod str uniq + = mkKnownKeyExternalName (mkBasePkgModule mod) (mkOccFS space str) uniq +mk_wired_in_name space mod str uniq + = mkWiredInName (mkBasePkgModule mod) (mkOccFS space str) uniq + +kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc -- Kinds are not z-encoded in interface file, hence mkKindOccFS -- And they don't come from any particular module; indeed we always -- want to print them unqualified. Hence the LocalName - -varQual_RDR mod str = mkOrig varName mod str -tcQual_RDR mod str = mkOrig tcName mod str -clsQual_RDR mod str = mkOrig clsName mod str -dataQual_RDR mod str = mkOrig dataName mod str \end{code} %************************************************************************ @@ -736,15 +777,18 @@ dataQual_RDR mod str = mkOrig dataName mod str \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@} %* * %************************************************************************ +--MetaHaskell extension hand allocate keys here \begin{code} boundedClassKey = mkPreludeClassUnique 1 enumClassKey = mkPreludeClassUnique 2 eqClassKey = mkPreludeClassUnique 3 +typeableClassKey = mkPreludeClassUnique 4 floatingClassKey = mkPreludeClassUnique 5 fractionalClassKey = mkPreludeClassUnique 6 integralClassKey = mkPreludeClassUnique 7 monadClassKey = mkPreludeClassUnique 8 +dataClassKey = mkPreludeClassUnique 9 functorClassKey = mkPreludeClassUnique 10 numClassKey = mkPreludeClassUnique 11 ordClassKey = mkPreludeClassUnique 12 @@ -753,10 +797,8 @@ realClassKey = mkPreludeClassUnique 14 realFloatClassKey = mkPreludeClassUnique 15 realFracClassKey = mkPreludeClassUnique 16 showClassKey = mkPreludeClassUnique 17 - cCallableClassKey = mkPreludeClassUnique 18 cReturnableClassKey = mkPreludeClassUnique 19 - ixClassKey = mkPreludeClassUnique 20 \end{code} @@ -790,8 +832,6 @@ int64TyConKey = mkPreludeTyConUnique 21 integerTyConKey = mkPreludeTyConUnique 22 listTyConKey = mkPreludeTyConUnique 23 foreignObjPrimTyConKey = mkPreludeTyConUnique 24 -foreignObjTyConKey = mkPreludeTyConUnique 25 -foreignPtrTyConKey = mkPreludeTyConUnique 26 weakPrimTyConKey = mkPreludeTyConUnique 27 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29 @@ -828,11 +868,6 @@ bcoPrimTyConKey = mkPreludeTyConUnique 73 ptrTyConKey = mkPreludeTyConUnique 74 funPtrTyConKey = mkPreludeTyConUnique 75 --- Usage type constructors -usageConKey = mkPreludeTyConUnique 76 -usOnceTyConKey = mkPreludeTyConUnique 77 -usManyTyConKey = mkPreludeTyConUnique 78 - -- Generic Type Constructors crossTyConKey = mkPreludeTyConUnique 79 plusTyConKey = mkPreludeTyConUnique 80 @@ -841,6 +876,15 @@ genUnitTyConKey = mkPreludeTyConUnique 81 -- Parallel array type constructor parrTyConKey = mkPreludeTyConUnique 82 +-- dotnet interop +objectTyConKey = mkPreludeTyConUnique 83 + +eitherTyConKey = mkPreludeTyConUnique 84 + +---------------- Template Haskell ------------------- +-- USES TyConUniques 100-119 +----------------------------------------------------- + unitTyConKey = mkTupleTyConUnique Boxed 0 \end{code} @@ -851,7 +895,6 @@ unitTyConKey = mkTupleTyConUnique Boxed 0 %************************************************************************ \begin{code} -addrDataConKey = mkPreludeDataConUnique 0 charDataConKey = mkPreludeDataConUnique 1 consDataConKey = mkPreludeDataConUnique 2 doubleDataConKey = mkPreludeDataConUnique 3 @@ -860,17 +903,12 @@ floatDataConKey = mkPreludeDataConUnique 5 intDataConKey = mkPreludeDataConUnique 6 smallIntegerDataConKey = mkPreludeDataConUnique 7 largeIntegerDataConKey = mkPreludeDataConUnique 8 -foreignObjDataConKey = mkPreludeDataConUnique 9 -foreignPtrDataConKey = mkPreludeDataConUnique 10 nilDataConKey = mkPreludeDataConUnique 11 ratioDataConKey = mkPreludeDataConUnique 12 -stablePtrDataConKey = mkPreludeDataConUnique 13 stableNameDataConKey = mkPreludeDataConUnique 14 trueDataConKey = mkPreludeDataConUnique 15 wordDataConKey = mkPreludeDataConUnique 16 ioDataConKey = mkPreludeDataConUnique 17 -ptrDataConKey = mkPreludeDataConUnique 18 -funPtrDataConKey = mkPreludeDataConUnique 19 -- Generic data constructors crossDataConKey = mkPreludeDataConUnique 20 @@ -880,6 +918,9 @@ genUnitDataConKey = mkPreludeDataConUnique 23 -- Data constructor for parallel arrays parrDataConKey = mkPreludeDataConUnique 24 + +leftDataConKey = mkPreludeDataConUnique 25 +rightDataConKey = mkPreludeDataConUnique 26 \end{code} %************************************************************************ @@ -890,36 +931,36 @@ parrDataConKey = mkPreludeDataConUnique 24 \begin{code} absentErrorIdKey = mkPreludeMiscIdUnique 1 -appendIdKey = mkPreludeMiscIdUnique 2 augmentIdKey = mkPreludeMiscIdUnique 3 -buildIdKey = mkPreludeMiscIdUnique 4 -errorIdKey = mkPreludeMiscIdUnique 5 -foldlIdKey = mkPreludeMiscIdUnique 6 -foldrIdKey = mkPreludeMiscIdUnique 7 -recSelErrIdKey = mkPreludeMiscIdUnique 8 -integerMinusOneIdKey = mkPreludeMiscIdUnique 9 -integerPlusOneIdKey = mkPreludeMiscIdUnique 10 -integerPlusTwoIdKey = mkPreludeMiscIdUnique 11 -integerZeroIdKey = mkPreludeMiscIdUnique 12 -int2IntegerIdKey = mkPreludeMiscIdUnique 13 -seqIdKey = mkPreludeMiscIdUnique 14 -irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15 -eqStringIdKey = mkPreludeMiscIdUnique 16 -noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17 -nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18 -runtimeErrorIdKey = mkPreludeMiscIdUnique 19 -parErrorIdKey = mkPreludeMiscIdUnique 20 -parIdKey = mkPreludeMiscIdUnique 21 -patErrorIdKey = mkPreludeMiscIdUnique 22 -realWorldPrimIdKey = mkPreludeMiscIdUnique 23 -recConErrorIdKey = mkPreludeMiscIdUnique 24 -recUpdErrorIdKey = mkPreludeMiscIdUnique 25 -traceIdKey = mkPreludeMiscIdUnique 26 -unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27 -unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28 -unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29 -unpackCStringIdKey = mkPreludeMiscIdUnique 30 -ushowListIdKey = mkPreludeMiscIdUnique 31 +appendIdKey = mkPreludeMiscIdUnique 4 +buildIdKey = mkPreludeMiscIdUnique 5 +errorIdKey = mkPreludeMiscIdUnique 6 +foldlIdKey = mkPreludeMiscIdUnique 7 +foldrIdKey = mkPreludeMiscIdUnique 8 +recSelErrorIdKey = mkPreludeMiscIdUnique 9 +integerMinusOneIdKey = mkPreludeMiscIdUnique 10 +integerPlusOneIdKey = mkPreludeMiscIdUnique 11 +integerPlusTwoIdKey = mkPreludeMiscIdUnique 12 +integerZeroIdKey = mkPreludeMiscIdUnique 13 +int2IntegerIdKey = mkPreludeMiscIdUnique 14 +seqIdKey = mkPreludeMiscIdUnique 15 +irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16 +eqStringIdKey = mkPreludeMiscIdUnique 17 +noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18 +nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19 +runtimeErrorIdKey = mkPreludeMiscIdUnique 20 +parErrorIdKey = mkPreludeMiscIdUnique 21 +parIdKey = mkPreludeMiscIdUnique 22 +patErrorIdKey = mkPreludeMiscIdUnique 23 +realWorldPrimIdKey = mkPreludeMiscIdUnique 24 +recConErrorIdKey = mkPreludeMiscIdUnique 25 +recUpdErrorIdKey = mkPreludeMiscIdUnique 26 +traceIdKey = mkPreludeMiscIdUnique 27 +unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28 +unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29 +unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30 +unpackCStringIdKey = mkPreludeMiscIdUnique 31 + unsafeCoerceIdKey = mkPreludeMiscIdUnique 32 concatIdKey = mkPreludeMiscIdUnique 33 filterIdKey = mkPreludeMiscIdUnique 34 @@ -928,7 +969,6 @@ bindIOIdKey = mkPreludeMiscIdUnique 36 returnIOIdKey = mkPreludeMiscIdUnique 37 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38 newStablePtrIdKey = mkPreludeMiscIdUnique 39 -getTagIdKey = mkPreludeMiscIdUnique 40 plusIntegerIdKey = mkPreludeMiscIdUnique 41 timesIntegerIdKey = mkPreludeMiscIdUnique 42 printIdKey = mkPreludeMiscIdUnique 43 @@ -939,32 +979,41 @@ splitIdKey = mkPreludeMiscIdUnique 48 fstIdKey = mkPreludeMiscIdUnique 49 sndIdKey = mkPreludeMiscIdUnique 50 otherwiseIdKey = mkPreludeMiscIdUnique 51 -mapIdKey = mkPreludeMiscIdUnique 52 assertIdKey = mkPreludeMiscIdUnique 53 runSTRepIdKey = mkPreludeMiscIdUnique 54 -dollarMainKey = mkPreludeMiscIdUnique 55 +rootMainKey = mkPreludeMiscIdUnique 55 runMainKey = mkPreludeMiscIdUnique 56 andIdKey = mkPreludeMiscIdUnique 57 orIdKey = mkPreludeMiscIdUnique 58 thenIOIdKey = mkPreludeMiscIdUnique 59 +lazyIdKey = mkPreludeMiscIdUnique 60 +assertErrorIdKey = mkPreludeMiscIdUnique 61 -- Parallel array functions -nullPIdKey = mkPreludeMiscIdUnique 70 -lengthPIdKey = mkPreludeMiscIdUnique 71 -replicatePIdKey = mkPreludeMiscIdUnique 72 -mapPIdKey = mkPreludeMiscIdUnique 73 -filterPIdKey = mkPreludeMiscIdUnique 74 -zipPIdKey = mkPreludeMiscIdUnique 75 -crossPIdKey = mkPreludeMiscIdUnique 76 -indexPIdKey = mkPreludeMiscIdUnique 77 -toPIdKey = mkPreludeMiscIdUnique 78 -enumFromToPIdKey = mkPreludeMiscIdUnique 79 -enumFromThenToPIdKey = mkPreludeMiscIdUnique 80 -bpermutePIdKey = mkPreludeMiscIdUnique 81 -bpermuteDftPIdKey = mkPreludeMiscIdUnique 82 -indexOfPIdKey = mkPreludeMiscIdUnique 83 +nullPIdKey = mkPreludeMiscIdUnique 80 +lengthPIdKey = mkPreludeMiscIdUnique 81 +replicatePIdKey = mkPreludeMiscIdUnique 82 +mapPIdKey = mkPreludeMiscIdUnique 83 +filterPIdKey = mkPreludeMiscIdUnique 84 +zipPIdKey = mkPreludeMiscIdUnique 85 +crossPIdKey = mkPreludeMiscIdUnique 86 +indexPIdKey = mkPreludeMiscIdUnique 87 +toPIdKey = mkPreludeMiscIdUnique 88 +enumFromToPIdKey = mkPreludeMiscIdUnique 89 +enumFromThenToPIdKey = mkPreludeMiscIdUnique 90 +bpermutePIdKey = mkPreludeMiscIdUnique 91 +bpermuteDftPIdKey = mkPreludeMiscIdUnique 92 +indexOfPIdKey = mkPreludeMiscIdUnique 93 + +-- dotnet interop +unmarshalObjectIdKey = mkPreludeMiscIdUnique 94 +marshalObjectIdKey = mkPreludeMiscIdUnique 95 +marshalStringIdKey = mkPreludeMiscIdUnique 96 +unmarshalStringIdKey = mkPreludeMiscIdUnique 97 +checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98 + \end{code} Certain class operations from Prelude classes. They get their own @@ -974,6 +1023,7 @@ during type checking. \begin{code} -- Just a place holder for unbound variables produced by the renamer: unboundKey = mkPreludeMiscIdUnique 101 + fromIntegerClassOpKey = mkPreludeMiscIdUnique 102 minusClassOpKey = mkPreludeMiscIdUnique 103 fromRationalClassOpKey = mkPreludeMiscIdUnique 104 @@ -987,9 +1037,22 @@ negateClassOpKey = mkPreludeMiscIdUnique 111 failMClassOpKey = mkPreludeMiscIdUnique 112 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=) thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>) -fromEnumClassOpKey = mkPreludeMiscIdUnique 115 returnMClassOpKey = mkPreludeMiscIdUnique 117 -toEnumClassOpKey = mkPreludeMiscIdUnique 119 + +-- Recursive do notation +mfixIdKey = mkPreludeMiscIdUnique 118 + +-- Arrow notation +arrAIdKey = mkPreludeMiscIdUnique 119 +composeAIdKey = mkPreludeMiscIdUnique 120 -- >>> +firstAIdKey = mkPreludeMiscIdUnique 121 +appAIdKey = mkPreludeMiscIdUnique 122 +choiceAIdKey = mkPreludeMiscIdUnique 123 -- ||| +loopAIdKey = mkPreludeMiscIdUnique 124 + +---------------- Template Haskell ------------------- +-- USES IdUniques 200-299 +----------------------------------------------------- \end{code} @@ -1016,8 +1079,6 @@ cCallishTyKeys = , wordTyConKey , byteArrayTyConKey , mutableByteArrayTyConKey - , foreignObjTyConKey - , foreignPtrTyConKey , stablePtrTyConKey , int8TyConKey , int16TyConKey @@ -1037,62 +1098,6 @@ cCallishTyKeys = %* * %************************************************************************ -@derivableClassKeys@ is also used in checking \tr{deriving} constructs -(@TcDeriv@). - -@derivingOccurrences@ maps a class name to a list of the (qualified) -occurrences that will be mentioned by the derived code for the class -when it is later generated. We don't need to put in things that are -WiredIn (because they are already mapped to their correct name by the -@NameSupply@. The class itself, and all its class ops, is already -flagged as an occurrence so we don't need to mention that either. - -@derivingOccurrences@ has an item for every derivable class, even if -that item is empty, because we treat lookup failure as indicating that -the class is illegal in a deriving clause. - -\begin{code} -derivingOccurrences :: UniqFM [RdrName] -derivingOccurrences = listToUFM deriving_occ_info - -derivableClassKeys = map fst deriving_occ_info - -deriving_occ_info - = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR]) - , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR, error_RDR]) - -- EQ (from Ordering) is needed to force in the constructors - -- as well as the type constructor. - , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, - error_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, - lexP_RDR, readPrec_RDR, - readListDefault_RDR, readListPrecDefault_RDR, - step_RDR, parens_RDR, reset_RDR, prec_RDR, alt_RDR, choose_RDR, - ident_RDR, -- Pulls in the entire Lex.Lexeme data type - bindM_RDR -- Pulls in the entire Monad class decl - ] ) - , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR, error_RDR, - foldr_RDR, build_RDR, - -- foldr and build required for list comprehension used - -- with single constructor types -- KSW 2000-06 - 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 - ] - -- intTyCon: Practically any deriving needs Int, either for index calculations, - -- or for taggery. - -- ordClass: really it's the methods that are actually used. - -- numClass: for Int literals -\end{code} - - NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@ even though every numeric class has these two as a superclass, because the list of ambiguous dictionaries hasn't been simplified. @@ -1138,3 +1143,12 @@ noDictClassKeys -- These classes are used only for type annotations; = cCallishClassKeys \end{code} +@derivableClassKeys@ is also used in checking \tr{deriving} constructs +(@TcDeriv@). + +\begin{code} +derivableClassKeys + = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey, + boundedClassKey, showClassKey, readClassKey ] +\end{code} +