X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Fprelude%2FPrelInfo.lhs;h=867e79d99acec2f61635cd8a0c089a95ecbf4e4b;hp=31457b2b630e113fd28ab1b40f7480a777eadfa6;hb=f537dd87c4a07526e2b1fc1bd1c125d652833641;hpb=0065d5ab628975892cea1ec7303f968c3338cbe1 diff --git a/compiler/prelude/PrelInfo.lhs b/compiler/prelude/PrelInfo.lhs index 31457b2..867e79d 100644 --- a/compiler/prelude/PrelInfo.lhs +++ b/compiler/prelude/PrelInfo.lhs @@ -5,30 +5,30 @@ \begin{code} module PrelInfo ( - module MkId, + wiredInIds, ghcPrimIds, + primOpRules, builtinRules, - ghcPrimExports, - wiredInThings, basicKnownKeyNames, - primOpId, - - -- Random other things - maybeCharLikeCon, maybeIntLikeCon, + ghcPrimExports, + wiredInThings, basicKnownKeyNames, + primOpId, + + -- Random other things + maybeCharLikeCon, maybeIntLikeCon, - -- Class categories - isNumericClass, isStandardClass + -- Class categories + isNumericClass, isStandardClass ) where #include "HsVersions.h" -import PrelNames ( basicKnownKeyNames, - hasKey, charDataConKey, intDataConKey, - numericClassKeys, standardClassKeys ) - +import PrelNames ( basicKnownKeyNames, + hasKey, charDataConKey, intDataConKey, + numericClassKeys, standardClassKeys ) +import PrelRules import PrimOp ( PrimOp, allThePrimOps, primOpOcc, primOpTag, maxPrimOpTag ) import DataCon ( DataCon ) import Id ( Id, idName ) -import MkId ( mkPrimOpId, wiredInIds ) import MkId -- All of it, for re-export import Name ( nameOccName ) import TysPrim ( primTyCons ) @@ -39,7 +39,7 @@ import Type ( funTyCon ) import TyCon ( tyConName ) import Util ( isIn ) -import Array ( Array, array, (!) ) +import Data.Array \end{code} %************************************************************************ @@ -48,11 +48,30 @@ import Array ( Array, array, (!) ) %* * %************************************************************************ -We have two ``builtin name funs,'' one to look up @TyCons@ and -@Classes@, the other to look up values. +Notes about wired in things +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* Wired-in things are Ids\/TyCons that are completely known to the compiler. + They are global values in GHC, (e.g. listTyCon :: TyCon). + +* A wired in Name contains the thing itself inside the Name: + see Name.wiredInNameTyThing_maybe + (E.g. listTyConName contains listTyCon. + +* The name cache is initialised with (the names of) all wired-in things + +* The type checker sees if the Name is wired in before looking up + the name in the type environment. So the type envt itself contains + no wired in things. + +* MkIface prunes out wired-in things before putting them in an interface file. + So interface files never contain wired-in things. + \begin{code} wiredInThings :: [TyThing] +-- This list is used only to initialise HscMain.knownKeyNames +-- to ensure that when you say "Prelude.map" in your source code, you +-- get a Name with the correct known key wiredInThings = concat [ -- Wired in TyCons and their implicit Ids @@ -135,5 +154,7 @@ isNumericClass, isStandardClass :: Class -> Bool isNumericClass clas = classKey clas `is_elem` numericClassKeys isStandardClass clas = classKey clas `is_elem` standardClassKeys + +is_elem :: Eq a => a -> [a] -> Bool is_elem = isIn "is_X_Class" \end{code}