X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Fcompiler%2Fprelude%2FPrelNames.lhs;fp=ghc%2Fcompiler%2Fprelude%2FPrelNames.lhs;h=0000000000000000000000000000000000000000;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hp=d656fbf18ed3728896728cb226b5d71b2eb71b2a;hpb=28a464a75e14cece5db40f2765a29348273ff2d2;p=ghc-hetmet.git diff --git a/ghc/compiler/prelude/PrelNames.lhs b/ghc/compiler/prelude/PrelNames.lhs deleted file mode 100644 index d656fbf..0000000 --- a/ghc/compiler/prelude/PrelNames.lhs +++ /dev/null @@ -1,1063 +0,0 @@ -% -% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998 -% -\section[PrelNames]{Definitions of prelude modules and names} - - -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) 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 - ) where - -#include "HsVersions.h" - -import Module ( Module, mkModule ) -import OccName ( dataName, tcName, clsName, varName, mkOccNameFS, - mkVarOccFS ) -import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual ) -import Unique ( Unique, Uniquable(..), hasKey, - mkPreludeMiscIdUnique, mkPreludeDataConUnique, - mkPreludeTyConUnique, mkPreludeClassUnique, - mkTupleTyConUnique - ) -import BasicTypes ( Boxity(..), Arity ) -import Name ( Name, mkInternalName, mkExternalName, nameModule ) -import SrcLoc ( noSrcLoc ) -import FastString -\end{code} - - -%************************************************************************ -%* * -\subsection{Local Names} -%* * -%************************************************************************ - -This *local* name is used by the interactive stuff - -\begin{code} -itName uniq = mkInternalName uniq (mkOccNameFS varName FSLIT("it")) noSrcLoc -\end{code} - -\begin{code} --- 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) noSrcLoc - -isUnboundName :: Name -> Bool -isUnboundName name = name `hasKey` unboundKey -\end{code} - - -%************************************************************************ -%* * -\subsection{Known key Names} -%* * -%************************************************************************ - -This section tells what the compiler knows about the assocation of -names with uniques. These ones are the *non* wired-in ones. The -wired in ones are defined in TysWiredIn etc. - -\begin{code} -basicKnownKeyNames :: [Name] -basicKnownKeyNames - = genericTyConNames - ++ typeableClassNames - ++ [ -- Type constructors (synonyms especially) - ioTyConName, ioDataConName, - runMainIOName, - orderingTyConName, - rationalTyConName, - ratioDataConName, - ratioTyConName, - byteArrayTyConName, - mutableByteArrayTyConName, - integerTyConName, smallIntegerDataConName, largeIntegerDataConName, - - -- Classes. *Must* include: - -- classes that are grabbed by key (e.g., eqClassKey) - -- classes in "Class.standardClassKeys" (quite a few) - eqClassName, -- mentioned, derivable - ordClassName, -- derivable - boundedClassName, -- derivable - numClassName, -- mentioned, numeric - enumClassName, -- derivable - monadClassName, - functorClassName, - realClassName, -- numeric - integralClassName, -- numeric - fractionalClassName, -- numeric - floatingClassName, -- numeric - realFracClassName, -- numeric - realFloatClassName, -- numeric - dataClassName, - - -- Numeric stuff - negateName, minusName, - fromRationalName, fromIntegerName, - geName, eqName, - - -- Enum stuff - enumFromName, enumFromThenName, - enumFromThenToName, enumFromToName, - enumFromToPName, enumFromThenToPName, - - -- Monad stuff - thenIOName, bindIOName, returnIOName, failIOName, - failMName, bindMName, thenMName, returnMName, - - -- MonadRec stuff - mfixName, - - -- Arrow stuff - arrAName, composeAName, firstAName, - appAName, choiceAName, loopAName, - - -- Ix stuff - ixClassName, - - -- Show stuff - showClassName, - - -- Read stuff - readClassName, - - -- Stable pointers - newStablePtrName, - - -- Strings and lists - unpackCStringName, unpackCStringAppendName, - unpackCStringFoldrName, unpackCStringUtf8Name, - - -- List operations - concatName, filterName, - zipName, foldrName, buildName, augmentName, appendName, - - -- Parallel array operations - nullPName, lengthPName, replicatePName, mapPName, - filterPName, zipPName, crossPName, indexPName, - toPName, bpermutePName, bpermuteDftPName, indexOfPName, - - -- FFI primitive types that are not wired-in. - stablePtrTyConName, ptrTyConName, funPtrTyConName, addrTyConName, - int8TyConName, int16TyConName, int32TyConName, int64TyConName, - wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName, - - -- Others - otherwiseIdName, - plusIntegerName, timesIntegerName, - eqStringName, assertName, breakpointName, assertErrorName, - runSTRepName, - printName, fstName, sndName, - - -- MonadFix - monadFixClassName, mfixName, - - -- Splittable class - splittableClassName, splitName, - - -- Other classes - randomClassName, randomGenClassName, monadPlusClassName, - - -- Booleans - andName, orName - - -- The Either type - , eitherTyConName, leftDataConName, rightDataConName - - -- dotnet interop - , objectTyConName, marshalObjectName, unmarshalObjectName - , marshalStringName, unmarshalStringName, checkDotnetResName - ] - -genericTyConNames :: [Name] -genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName] -\end{code} - - -%************************************************************************ -%* * -\subsection{Module names} -%* * -%************************************************************************ - - ---MetaHaskell Extension Add a new module here -\begin{code} -pRELUDE = mkModule "Prelude" -gHC_PRIM = mkModule "GHC.Prim" -- Primitive types and values -pREL_BASE = mkModule "GHC.Base" -pREL_ENUM = mkModule "GHC.Enum" -pREL_SHOW = mkModule "GHC.Show" -pREL_READ = mkModule "GHC.Read" -pREL_NUM = mkModule "GHC.Num" -pREL_LIST = mkModule "GHC.List" -pREL_PARR = mkModule "GHC.PArr" -pREL_TUP = mkModule "Data.Tuple" -pREL_EITHER = mkModule "Data.Either" -pREL_PACK = mkModule "GHC.Pack" -pREL_CONC = mkModule "GHC.Conc" -pREL_IO_BASE = mkModule "GHC.IOBase" -pREL_ST = mkModule "GHC.ST" -pREL_ARR = mkModule "GHC.Arr" -pREL_BYTEARR = mkModule "PrelByteArr" -pREL_STABLE = mkModule "GHC.Stable" -pREL_ADDR = mkModule "GHC.Addr" -pREL_PTR = mkModule "GHC.Ptr" -pREL_ERR = mkModule "GHC.Err" -pREL_REAL = mkModule "GHC.Real" -pREL_FLOAT = mkModule "GHC.Float" -pREL_TOP_HANDLER= mkModule "GHC.TopHandler" -sYSTEM_IO = mkModule "System.IO" -dYNAMIC = mkModule "Data.Dynamic" -tYPEABLE = mkModule "Data.Typeable" -gENERICS = mkModule "Data.Generics.Basics" -dOTNET = mkModule "GHC.Dotnet" - -rEAD_PREC = mkModule "Text.ParserCombinators.ReadPrec" -lEX = mkModule "Text.Read.Lex" - -mAIN = mkModule "Main" -pREL_INT = mkModule "GHC.Int" -pREL_WORD = mkModule "GHC.Word" -mONAD = mkModule "Control.Monad" -mONAD_FIX = mkModule "Control.Monad.Fix" -aRROW = mkModule "Control.Arrow" -aDDR = mkModule "Addr" -rANDOM = mkModule "System.Random" - -gLA_EXTS = mkModule "GHC.Exts" -rOOT_MAIN = mkModule ":Main" -- Root module for initialisation - -- The ':xxx' makes a module 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 = mkModule ":Interactive" -thFAKE = mkModule ":THFake" -\end{code} - -%************************************************************************ -%* * -\subsection{Constructing the names of tuples -%* * -%************************************************************************ - -\begin{code} -mkTupleModule :: Boxity -> Arity -> Module -mkTupleModule Boxed 0 = pREL_BASE -mkTupleModule Boxed _ = pREL_TUP -mkTupleModule Unboxed _ = gHC_PRIM -\end{code} - - -%************************************************************************ -%* * - RdrNames -%* * -%************************************************************************ - -\begin{code} -main_RDR_Unqual = mkUnqual varName FSLIT("main") - -- We definitely don't want an Orig RdrName, because - -- main might, in principle, be imported into module Main - -eq_RDR = nameRdrName eqName -ge_RDR = nameRdrName geName -ne_RDR = varQual_RDR pREL_BASE FSLIT("/=") -le_RDR = varQual_RDR pREL_BASE FSLIT("<=") -gt_RDR = varQual_RDR pREL_BASE FSLIT(">") -compare_RDR = varQual_RDR pREL_BASE FSLIT("compare") -ltTag_RDR = dataQual_RDR pREL_BASE FSLIT("LT") -eqTag_RDR = dataQual_RDR pREL_BASE FSLIT("EQ") -gtTag_RDR = dataQual_RDR pREL_BASE FSLIT("GT") - -eqClass_RDR = nameRdrName eqClassName -numClass_RDR = nameRdrName numClassName -ordClass_RDR = nameRdrName ordClassName -enumClass_RDR = nameRdrName enumClassName -monadClass_RDR = nameRdrName monadClassName - -map_RDR = varQual_RDR pREL_BASE FSLIT("map") -append_RDR = varQual_RDR pREL_BASE FSLIT("++") - -foldr_RDR = nameRdrName foldrName -build_RDR = nameRdrName buildName -returnM_RDR = nameRdrName returnMName -bindM_RDR = nameRdrName bindMName -failM_RDR = nameRdrName failMName - -and_RDR = nameRdrName andName - -left_RDR = nameRdrName leftDataConName -right_RDR = nameRdrName rightDataConName - -fromEnum_RDR = varQual_RDR pREL_ENUM FSLIT("fromEnum") -toEnum_RDR = varQual_RDR pREL_ENUM FSLIT("toEnum") - -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 FSLIT("A#") -wordDataCon_RDR = dataQual_RDR pREL_WORD FSLIT("W#") - -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 FSLIT("*") -plus_RDR = varQual_RDR pREL_NUM FSLIT("+") - -compose_RDR = varQual_RDR pREL_BASE FSLIT(".") - -not_RDR = varQual_RDR pREL_BASE FSLIT("not") -getTag_RDR = varQual_RDR pREL_BASE FSLIT("getTag") -succ_RDR = varQual_RDR pREL_ENUM FSLIT("succ") -pred_RDR = varQual_RDR pREL_ENUM FSLIT("pred") -minBound_RDR = varQual_RDR pREL_ENUM FSLIT("minBound") -maxBound_RDR = varQual_RDR pREL_ENUM FSLIT("maxBound") -range_RDR = varQual_RDR pREL_ARR FSLIT("range") -inRange_RDR = varQual_RDR pREL_ARR FSLIT("inRange") -index_RDR = varQual_RDR pREL_ARR FSLIT("index") -unsafeIndex_RDR = varQual_RDR pREL_ARR FSLIT("unsafeIndex") -unsafeRangeSize_RDR = varQual_RDR pREL_ARR FSLIT("unsafeRangeSize") - -readList_RDR = varQual_RDR pREL_READ FSLIT("readList") -readListDefault_RDR = varQual_RDR pREL_READ FSLIT("readListDefault") -readListPrec_RDR = varQual_RDR pREL_READ FSLIT("readListPrec") -readListPrecDefault_RDR = varQual_RDR pREL_READ FSLIT("readListPrecDefault") -readPrec_RDR = varQual_RDR pREL_READ FSLIT("readPrec") -parens_RDR = varQual_RDR pREL_READ FSLIT("parens") -choose_RDR = varQual_RDR pREL_READ FSLIT("choose") -lexP_RDR = varQual_RDR pREL_READ FSLIT("lexP") - -punc_RDR = dataQual_RDR lEX FSLIT("Punc") -ident_RDR = dataQual_RDR lEX FSLIT("Ident") -symbol_RDR = dataQual_RDR lEX FSLIT("Symbol") - -step_RDR = varQual_RDR rEAD_PREC FSLIT("step") -alt_RDR = varQual_RDR rEAD_PREC FSLIT("+++") -reset_RDR = varQual_RDR rEAD_PREC FSLIT("reset") -prec_RDR = varQual_RDR rEAD_PREC FSLIT("prec") - -showList_RDR = varQual_RDR pREL_SHOW FSLIT("showList") -showList___RDR = varQual_RDR pREL_SHOW FSLIT("showList__") -showsPrec_RDR = varQual_RDR pREL_SHOW FSLIT("showsPrec") -showString_RDR = varQual_RDR pREL_SHOW FSLIT("showString") -showSpace_RDR = varQual_RDR pREL_SHOW FSLIT("showSpace") -showParen_RDR = varQual_RDR pREL_SHOW FSLIT("showParen") - -typeOf_RDR = varQual_RDR tYPEABLE FSLIT("typeOf") -mkTypeRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyConApp") -mkTyConRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyCon") - -undefined_RDR = varQual_RDR pREL_ERR FSLIT("undefined") - -crossDataCon_RDR = dataQual_RDR pREL_BASE FSLIT(":*:") -inlDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Inl") -inrDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Inr") -genUnitDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Unit") - ----------------------- -varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str) -tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str) -clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str) -dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str) -\end{code} - -%************************************************************************ -%* * -\subsection{Known-key names} -%* * -%************************************************************************ - -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} -runMainIOName = varQual pREL_TOP_HANDLER FSLIT("runMainIO") runMainKey - -orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey - -eitherTyConName = tcQual pREL_EITHER FSLIT("Either") eitherTyConKey -leftDataConName = conName eitherTyConName FSLIT("Left") leftDataConKey -rightDataConName = conName eitherTyConName FSLIT("Right") rightDataConKey - --- Generics -crossTyConName = tcQual pREL_BASE FSLIT(":*:") crossTyConKey -plusTyConName = tcQual pREL_BASE FSLIT(":+:") plusTyConKey -genUnitTyConName = tcQual pREL_BASE FSLIT("Unit") genUnitTyConKey - --- Base strings Strings -unpackCStringName = varQual pREL_BASE FSLIT("unpackCString#") unpackCStringIdKey -unpackCStringAppendName = varQual pREL_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey -unpackCStringFoldrName = varQual pREL_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey -unpackCStringUtf8Name = varQual pREL_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey -eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey - --- Base classes (Eq, Ord, Functor) -eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey -eqName = methName eqClassName FSLIT("==") eqClassOpKey -ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey -geName = methName ordClassName FSLIT(">=") geClassOpKey -functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey - --- Class Monad -monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey -thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey -bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey -returnMName = methName monadClassName FSLIT("return") returnMClassOpKey -failMName = methName monadClassName FSLIT("fail") failMClassOpKey - --- Random PrelBase functions -otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey -foldrName = varQual pREL_BASE FSLIT("foldr") foldrIdKey -buildName = varQual pREL_BASE FSLIT("build") buildIdKey -augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey -appendName = varQual pREL_BASE FSLIT("++") appendIdKey -andName = varQual pREL_BASE FSLIT("&&") andIdKey -orName = varQual pREL_BASE FSLIT("||") orIdKey -assertName = varQual pREL_BASE FSLIT("assert") assertIdKey -breakpointName = varQual pREL_BASE FSLIT("breakpoint") breakpointIdKey -breakpointJumpName - = mkInternalName - breakpointJumpIdKey - (mkOccNameFS varName FSLIT("breakpointJump")) - noSrcLoc - --- PrelTup -fstName = varQual pREL_TUP FSLIT("fst") fstIdKey -sndName = varQual pREL_TUP FSLIT("snd") sndIdKey - --- Module PrelNum -numClassName = clsQual pREL_NUM FSLIT("Num") numClassKey -fromIntegerName = methName numClassName FSLIT("fromInteger") fromIntegerClassOpKey -minusName = methName numClassName FSLIT("-") minusClassOpKey -negateName = methName numClassName FSLIT("negate") negateClassOpKey -plusIntegerName = varQual pREL_NUM FSLIT("plusInteger") plusIntegerIdKey -timesIntegerName = varQual pREL_NUM FSLIT("timesInteger") timesIntegerIdKey -integerTyConName = tcQual pREL_NUM FSLIT("Integer") integerTyConKey -smallIntegerDataConName = conName integerTyConName FSLIT("S#") smallIntegerDataConKey -largeIntegerDataConName = conName integerTyConName FSLIT("J#") largeIntegerDataConKey - --- PrelReal types and classes -rationalTyConName = tcQual pREL_REAL FSLIT("Rational") rationalTyConKey -ratioTyConName = tcQual pREL_REAL FSLIT("Ratio") ratioTyConKey -ratioDataConName = conName ratioTyConName FSLIT(":%") ratioDataConKey -realClassName = clsQual pREL_REAL FSLIT("Real") realClassKey -integralClassName = clsQual pREL_REAL FSLIT("Integral") integralClassKey -realFracClassName = clsQual pREL_REAL FSLIT("RealFrac") realFracClassKey -fractionalClassName = clsQual pREL_REAL FSLIT("Fractional") fractionalClassKey -fromRationalName = methName fractionalClassName FSLIT("fromRational") fromRationalClassOpKey - --- PrelFloat classes -floatingClassName = clsQual pREL_FLOAT FSLIT("Floating") floatingClassKey -realFloatClassName = clsQual pREL_FLOAT FSLIT("RealFloat") realFloatClassKey - --- Class Ix -ixClassName = clsQual pREL_ARR FSLIT("Ix") ixClassKey - --- Class Typeable -typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey -typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey -typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey -typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey -typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey -typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey -typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey -typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey - -typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName - , typeable3ClassName, typeable4ClassName, typeable5ClassName - , typeable6ClassName, typeable7ClassName ] - --- Class Data -dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey - --- Error module -assertErrorName = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey - --- Enum module (Enum, Bounded) -enumClassName = clsQual pREL_ENUM FSLIT("Enum") enumClassKey -enumFromName = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey -enumFromToName = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey -enumFromThenName = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey -enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey -boundedClassName = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey - --- List functions -concatName = varQual pREL_LIST FSLIT("concat") concatIdKey -filterName = varQual pREL_LIST FSLIT("filter") filterIdKey -zipName = varQual pREL_LIST FSLIT("zip") zipIdKey - --- Class Show -showClassName = clsQual pREL_SHOW FSLIT("Show") showClassKey - --- Class Read -readClassName = clsQual pREL_READ FSLIT("Read") readClassKey - --- parallel array types and functions -enumFromToPName = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey -enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey -nullPName = varQual pREL_PARR FSLIT("nullP") nullPIdKey -lengthPName = varQual pREL_PARR FSLIT("lengthP") lengthPIdKey -replicatePName = varQual pREL_PARR FSLIT("replicateP") replicatePIdKey -mapPName = varQual pREL_PARR FSLIT("mapP") mapPIdKey -filterPName = varQual pREL_PARR FSLIT("filterP") filterPIdKey -zipPName = varQual pREL_PARR FSLIT("zipP") zipPIdKey -crossPName = varQual pREL_PARR FSLIT("crossP") crossPIdKey -indexPName = varQual pREL_PARR FSLIT("!:") indexPIdKey -toPName = varQual pREL_PARR FSLIT("toP") toPIdKey -bpermutePName = varQual pREL_PARR FSLIT("bpermuteP") bpermutePIdKey -bpermuteDftPName = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey -indexOfPName = varQual pREL_PARR FSLIT("indexOfP") indexOfPIdKey - --- IOBase things -ioTyConName = tcQual pREL_IO_BASE FSLIT("IO") ioTyConKey -ioDataConName = conName ioTyConName FSLIT("IO") ioDataConKey -thenIOName = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey -bindIOName = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey -returnIOName = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey -failIOName = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey - --- IO things -printName = varQual sYSTEM_IO FSLIT("print") printIdKey - --- Int, Word, and Addr things -int8TyConName = tcQual pREL_INT FSLIT("Int8") int8TyConKey -int16TyConName = tcQual pREL_INT FSLIT("Int16") int16TyConKey -int32TyConName = tcQual pREL_INT FSLIT("Int32") int32TyConKey -int64TyConName = tcQual pREL_INT FSLIT("Int64") int64TyConKey - --- Word module -word8TyConName = tcQual pREL_WORD FSLIT("Word8") word8TyConKey -word16TyConName = tcQual pREL_WORD FSLIT("Word16") word16TyConKey -word32TyConName = tcQual pREL_WORD FSLIT("Word32") word32TyConKey -word64TyConName = tcQual pREL_WORD FSLIT("Word64") word64TyConKey -wordTyConName = tcQual pREL_WORD FSLIT("Word") wordTyConKey -wordDataConName = conName wordTyConName FSLIT("W#") wordDataConKey - --- Addr module -addrTyConName = tcQual aDDR FSLIT("Addr") addrTyConKey - --- PrelPtr module -ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey -funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey - --- Byte array types -byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey -mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey - --- Foreign objects and weak pointers -stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey -newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey - --- PrelST module -runSTRepName = varQual pREL_ST FSLIT("runSTRep") runSTRepIdKey - --- The "split" Id for splittable implicit parameters -splittableClassName = clsQual gLA_EXTS FSLIT("Splittable") splittableClassKey -splitName = methName splittableClassName FSLIT("split") splitIdKey - --- Recursive-do notation -monadFixClassName = clsQual mONAD_FIX FSLIT("MonadFix") monadFixClassKey -mfixName = methName monadFixClassName FSLIT("mfix") mfixIdKey - --- Arrow notation -arrAName = varQual aRROW FSLIT("arr") arrAIdKey -composeAName = varQual aRROW FSLIT(">>>") composeAIdKey -firstAName = varQual aRROW FSLIT("first") firstAIdKey -appAName = varQual aRROW FSLIT("app") appAIdKey -choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey -loopAName = varQual aRROW FSLIT("loop") loopAIdKey - --- Other classes, needed for type defaulting -monadPlusClassName = clsQual mONAD FSLIT("MonadPlus") monadPlusClassKey -randomClassName = clsQual rANDOM FSLIT("Random") randomClassKey -randomGenClassName = clsQual rANDOM FSLIT("RandomGen") randomGenClassKey - --- dotnet interop -objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey - -- objectTyConName was "wTcQual", but that's gone now, and - -- I can't see why it was wired in anyway... -unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey -marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey -marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey -unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey -checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey -\end{code} - -%************************************************************************ -%* * -\subsection{Local helpers} -%* * -%************************************************************************ - -All these are original names; hence mkOrig - -\begin{code} -varQual = mk_known_key_name varName -tcQual = mk_known_key_name tcName -clsQual = mk_known_key_name clsName - -mk_known_key_name space mod str uniq - = mkExternalName uniq mod (mkOccNameFS space str) - Nothing noSrcLoc - -conName :: Name -> FastString -> Unique -> Name -conName tycon occ uniq - = mkExternalName uniq (nameModule tycon) (mkOccNameFS dataName occ) - (Just tycon) noSrcLoc - -methName :: Name -> FastString -> Unique -> Name -methName cls occ uniq - = mkExternalName uniq (nameModule cls) (mkVarOccFS occ) - (Just cls) noSrcLoc -\end{code} - -%************************************************************************ -%* * -\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 -floatingClassKey = mkPreludeClassUnique 5 -fractionalClassKey = mkPreludeClassUnique 6 -integralClassKey = mkPreludeClassUnique 7 -monadClassKey = mkPreludeClassUnique 8 -dataClassKey = mkPreludeClassUnique 9 -functorClassKey = mkPreludeClassUnique 10 -numClassKey = mkPreludeClassUnique 11 -ordClassKey = mkPreludeClassUnique 12 -readClassKey = mkPreludeClassUnique 13 -realClassKey = mkPreludeClassUnique 14 -realFloatClassKey = mkPreludeClassUnique 15 -realFracClassKey = mkPreludeClassUnique 16 -showClassKey = mkPreludeClassUnique 17 -ixClassKey = mkPreludeClassUnique 18 - -typeableClassKey = mkPreludeClassUnique 20 -typeable1ClassKey = mkPreludeClassUnique 21 -typeable2ClassKey = mkPreludeClassUnique 22 -typeable3ClassKey = mkPreludeClassUnique 23 -typeable4ClassKey = mkPreludeClassUnique 24 -typeable5ClassKey = mkPreludeClassUnique 25 -typeable6ClassKey = mkPreludeClassUnique 26 -typeable7ClassKey = mkPreludeClassUnique 27 - -monadFixClassKey = mkPreludeClassUnique 28 -splittableClassKey = mkPreludeClassUnique 29 - -monadPlusClassKey = mkPreludeClassUnique 30 -randomClassKey = mkPreludeClassUnique 31 -randomGenClassKey = mkPreludeClassUnique 32 -\end{code} - -%************************************************************************ -%* * -\subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@} -%* * -%************************************************************************ - -\begin{code} -addrPrimTyConKey = mkPreludeTyConUnique 1 -addrTyConKey = mkPreludeTyConUnique 2 -arrayPrimTyConKey = mkPreludeTyConUnique 3 -boolTyConKey = mkPreludeTyConUnique 4 -byteArrayPrimTyConKey = mkPreludeTyConUnique 5 -charPrimTyConKey = mkPreludeTyConUnique 7 -charTyConKey = mkPreludeTyConUnique 8 -doublePrimTyConKey = mkPreludeTyConUnique 9 -doubleTyConKey = mkPreludeTyConUnique 10 -floatPrimTyConKey = mkPreludeTyConUnique 11 -floatTyConKey = mkPreludeTyConUnique 12 -funTyConKey = mkPreludeTyConUnique 13 -intPrimTyConKey = mkPreludeTyConUnique 14 -intTyConKey = mkPreludeTyConUnique 15 -int8TyConKey = mkPreludeTyConUnique 16 -int16TyConKey = mkPreludeTyConUnique 17 -int32PrimTyConKey = mkPreludeTyConUnique 18 -int32TyConKey = mkPreludeTyConUnique 19 -int64PrimTyConKey = mkPreludeTyConUnique 20 -int64TyConKey = mkPreludeTyConUnique 21 -integerTyConKey = mkPreludeTyConUnique 22 -listTyConKey = mkPreludeTyConUnique 23 -foreignObjPrimTyConKey = mkPreludeTyConUnique 24 -weakPrimTyConKey = mkPreludeTyConUnique 27 -mutableArrayPrimTyConKey = mkPreludeTyConUnique 28 -mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29 -orderingTyConKey = mkPreludeTyConUnique 30 -mVarPrimTyConKey = mkPreludeTyConUnique 31 -ratioTyConKey = mkPreludeTyConUnique 32 -rationalTyConKey = mkPreludeTyConUnique 33 -realWorldTyConKey = mkPreludeTyConUnique 34 -stablePtrPrimTyConKey = mkPreludeTyConUnique 35 -stablePtrTyConKey = mkPreludeTyConUnique 36 -statePrimTyConKey = mkPreludeTyConUnique 50 -stableNamePrimTyConKey = mkPreludeTyConUnique 51 -stableNameTyConKey = mkPreludeTyConUnique 52 -mutableByteArrayTyConKey = mkPreludeTyConUnique 53 -mutVarPrimTyConKey = mkPreludeTyConUnique 55 -ioTyConKey = mkPreludeTyConUnique 56 -byteArrayTyConKey = mkPreludeTyConUnique 57 -wordPrimTyConKey = mkPreludeTyConUnique 58 -wordTyConKey = mkPreludeTyConUnique 59 -word8TyConKey = mkPreludeTyConUnique 60 -word16TyConKey = mkPreludeTyConUnique 61 -word32PrimTyConKey = mkPreludeTyConUnique 62 -word32TyConKey = mkPreludeTyConUnique 63 -word64PrimTyConKey = mkPreludeTyConUnique 64 -word64TyConKey = mkPreludeTyConUnique 65 -liftedConKey = mkPreludeTyConUnique 66 -unliftedConKey = mkPreludeTyConUnique 67 -anyBoxConKey = mkPreludeTyConUnique 68 -kindConKey = mkPreludeTyConUnique 69 -boxityConKey = mkPreludeTyConUnique 70 -typeConKey = mkPreludeTyConUnique 71 -threadIdPrimTyConKey = mkPreludeTyConUnique 72 -bcoPrimTyConKey = mkPreludeTyConUnique 73 -ptrTyConKey = mkPreludeTyConUnique 74 -funPtrTyConKey = mkPreludeTyConUnique 75 -tVarPrimTyConKey = mkPreludeTyConUnique 76 - --- Generic Type Constructors -crossTyConKey = mkPreludeTyConUnique 79 -plusTyConKey = mkPreludeTyConUnique 80 -genUnitTyConKey = mkPreludeTyConUnique 81 - --- Parallel array type constructor -parrTyConKey = mkPreludeTyConUnique 82 - --- dotnet interop -objectTyConKey = mkPreludeTyConUnique 83 - -eitherTyConKey = mkPreludeTyConUnique 84 - ----------------- Template Haskell ------------------- --- USES TyConUniques 100-129 ------------------------------------------------------ - -unitTyConKey = mkTupleTyConUnique Boxed 0 -\end{code} - -%************************************************************************ -%* * -\subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@} -%* * -%************************************************************************ - -\begin{code} -charDataConKey = mkPreludeDataConUnique 1 -consDataConKey = mkPreludeDataConUnique 2 -doubleDataConKey = mkPreludeDataConUnique 3 -falseDataConKey = mkPreludeDataConUnique 4 -floatDataConKey = mkPreludeDataConUnique 5 -intDataConKey = mkPreludeDataConUnique 6 -smallIntegerDataConKey = mkPreludeDataConUnique 7 -largeIntegerDataConKey = mkPreludeDataConUnique 8 -nilDataConKey = mkPreludeDataConUnique 11 -ratioDataConKey = mkPreludeDataConUnique 12 -stableNameDataConKey = mkPreludeDataConUnique 14 -trueDataConKey = mkPreludeDataConUnique 15 -wordDataConKey = mkPreludeDataConUnique 16 -ioDataConKey = mkPreludeDataConUnique 17 - --- Generic data constructors -crossDataConKey = mkPreludeDataConUnique 20 -inlDataConKey = mkPreludeDataConUnique 21 -inrDataConKey = mkPreludeDataConUnique 22 -genUnitDataConKey = mkPreludeDataConUnique 23 - --- Data constructor for parallel arrays -parrDataConKey = mkPreludeDataConUnique 24 - -leftDataConKey = mkPreludeDataConUnique 25 -rightDataConKey = mkPreludeDataConUnique 26 -\end{code} - -%************************************************************************ -%* * -\subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)} -%* * -%************************************************************************ - -\begin{code} -absentErrorIdKey = mkPreludeMiscIdUnique 1 -augmentIdKey = mkPreludeMiscIdUnique 3 -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 -zipIdKey = mkPreludeMiscIdUnique 35 -bindIOIdKey = mkPreludeMiscIdUnique 36 -returnIOIdKey = mkPreludeMiscIdUnique 37 -deRefStablePtrIdKey = mkPreludeMiscIdUnique 38 -newStablePtrIdKey = mkPreludeMiscIdUnique 39 -plusIntegerIdKey = mkPreludeMiscIdUnique 41 -timesIntegerIdKey = mkPreludeMiscIdUnique 42 -printIdKey = mkPreludeMiscIdUnique 43 -failIOIdKey = mkPreludeMiscIdUnique 44 -nullAddrIdKey = mkPreludeMiscIdUnique 46 -voidArgIdKey = mkPreludeMiscIdUnique 47 -splitIdKey = mkPreludeMiscIdUnique 48 -fstIdKey = mkPreludeMiscIdUnique 49 -sndIdKey = mkPreludeMiscIdUnique 50 -otherwiseIdKey = mkPreludeMiscIdUnique 51 -assertIdKey = mkPreludeMiscIdUnique 53 -runSTRepIdKey = mkPreludeMiscIdUnique 54 - -rootMainKey = mkPreludeMiscIdUnique 55 -runMainKey = mkPreludeMiscIdUnique 56 - -andIdKey = mkPreludeMiscIdUnique 57 -orIdKey = mkPreludeMiscIdUnique 58 -thenIOIdKey = mkPreludeMiscIdUnique 59 -lazyIdKey = mkPreludeMiscIdUnique 60 -assertErrorIdKey = mkPreludeMiscIdUnique 61 - -breakpointIdKey = mkPreludeMiscIdUnique 62 -breakpointJumpIdKey = mkPreludeMiscIdUnique 63 - --- Parallel array functions -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 -uniques so we can look them up easily when we want to conjure them up -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 -enumFromClassOpKey = mkPreludeMiscIdUnique 105 -enumFromThenClassOpKey = mkPreludeMiscIdUnique 106 -enumFromToClassOpKey = mkPreludeMiscIdUnique 107 -enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108 -eqClassOpKey = mkPreludeMiscIdUnique 109 -geClassOpKey = mkPreludeMiscIdUnique 110 -negateClassOpKey = mkPreludeMiscIdUnique 111 -failMClassOpKey = mkPreludeMiscIdUnique 112 -bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=) -thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>) -returnMClassOpKey = mkPreludeMiscIdUnique 117 - --- 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-399 ------------------------------------------------------ -\end{code} - - -%************************************************************************ -%* * -\subsection{Standard groups of types} -%* * -%************************************************************************ - -\begin{code} -numericTyKeys = - [ addrTyConKey - , wordTyConKey - , intTyConKey - , integerTyConKey - , doubleTyConKey - , floatTyConKey - ] - - -- Renamer always imports these data decls replete with constructors - -- so that desugarer can always see their constructors. Ugh! -cCallishTyKeys = - [ addrTyConKey - , wordTyConKey - , byteArrayTyConKey - , mutableByteArrayTyConKey - , stablePtrTyConKey - , int8TyConKey - , int16TyConKey - , int32TyConKey - , int64TyConKey - , word8TyConKey - , word16TyConKey - , word32TyConKey - , word64TyConKey - ] -\end{code} - - -%************************************************************************ -%* * -\subsection[Class-std-groups]{Standard groups of Prelude classes} -%* * -%************************************************************************ - -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. - -\begin{code} -numericClassKeys = - [ numClassKey - , realClassKey - , integralClassKey - ] - ++ fractionalClassKeys - -fractionalClassKeys = - [ fractionalClassKey - , floatingClassKey - , realFracClassKey - , realFloatClassKey - ] - - -- the strictness analyser needs to know about numeric types - -- (see SaAbsInt.lhs) -needsDataDeclCtxtClassKeys = -- see comments in TcDeriv - [ readClassKey - ] - --- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4), --- and are: "classes defined in the Prelude or a standard library" -standardClassKeys = derivableClassKeys ++ numericClassKeys - ++ [randomClassKey, randomGenClassKey, - functorClassKey, - monadClassKey, monadPlusClassKey] -\end{code} - -@derivableClassKeys@ is also used in checking \tr{deriving} constructs -(@TcDeriv@). - -\begin{code} -derivableClassKeys - = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey, - boundedClassKey, showClassKey, readClassKey ] -\end{code} -