[project @ 2000-11-10 15:12:50 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelNames]{Definitions of prelude modules}
5
6 The strings identify built-in prelude modules.  They are
7 defined here so as to avod 
8
9 [oh dear, looks like the recursive module monster caught up with
10  and gobbled whoever was writing the above :-) -- SOF ]
11
12 \begin{code}
13 module PrelNames (
14         Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
15
16         -----------------------------------------------------------
17         module PrelNames,       -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR
18                                 --                 (b) Uniques   e.g. intTyConKey
19                                 -- So many that we export them all
20
21         -----------------------------------------------------------
22         knownKeyNames, 
23         mkTupNameStr, mkTupConRdrName,
24
25         ------------------------------------------------------------
26         -- Goups of classes and types
27         needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
28         fractionalClassKeys, numericClassKeys, standardClassKeys,
29         derivingOccurrences,    -- For a given class C, this tells what other 
30         derivableClassKeys,     -- things are needed as a result of a 
31                                 -- deriving(C) clause
32         numericTyKeys, cCallishTyKeys,
33
34         mkUnboundName, isUnboundName
35     ) where
36
37 #include "HsVersions.h"
38
39 import Module     ( ModuleName, mkPrelModule, mkModuleName )
40 import OccName    ( NameSpace, UserFS, varName, dataName, tcName, clsName, mkKindOccFS )
41 import RdrName    ( RdrName, mkOrig, mkRdrOrig, mkUnqual )
42 import UniqFM
43 import Unique     ( Unique, Uniquable(..), hasKey,
44                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
45                     mkPreludeTyConUnique, mkPreludeClassUnique
46                   ) 
47 import BasicTypes ( Boxity(..), Arity )
48 import UniqFM     ( UniqFM, listToUFM )
49 import Name       ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
50 import RdrName    ( rdrNameOcc )
51 import SrcLoc     ( noSrcLoc )
52 import Util       ( nOfThem )
53 import Panic      ( panic )
54 \end{code}
55
56
57 %************************************************************************
58 %*                                                                      *
59 \subsection{Known key Names}
60 %*                                                                      *
61 %************************************************************************
62
63 This section tells what the compiler knows about the assocation of
64 names with uniques.  These ones are the *non* wired-in ones.  The
65 wired in ones are defined in TysWiredIn etc.
66
67 \begin{code}
68 knownKeyNames :: [Name]
69 knownKeyNames
70  =  [
71         -- Type constructors (synonyms especially)
72         ioTyConName,
73         mainName,
74         orderingTyConName,
75         rationalTyConName,
76         ratioDataConName,
77         ratioTyConName,
78         byteArrayTyConName,
79         mutableByteArrayTyConName,
80         foreignObjTyConName,
81         bcoPrimTyConName,
82         stablePtrTyConName,
83         stablePtrDataConName,
84
85         --  Classes.  *Must* include:
86         --      classes that are grabbed by key (e.g., eqClassKey)
87         --      classes in "Class.standardClassKeys" (quite a few)
88         eqClassName,                    -- mentioned, derivable
89         ordClassName,                   -- derivable
90         boundedClassName,               -- derivable
91         numClassName,                   -- mentioned, numeric
92         enumClassName,                  -- derivable
93         monadClassName,
94         monadPlusClassName,
95         functorClassName,
96         showClassName,                  -- derivable
97         realClassName,                  -- numeric
98         integralClassName,              -- numeric
99         fractionalClassName,            -- numeric
100         floatingClassName,              -- numeric
101         realFracClassName,              -- numeric
102         realFloatClassName,             -- numeric
103         readClassName,                  -- derivable
104         ixClassName,                    -- derivable (but it isn't Prelude.Ix; hmmm)
105         cCallableClassName,             -- mentioned, ccallish
106         cReturnableClassName,           -- mentioned, ccallish
107
108         -- ClassOps 
109         fromIntName,
110         fromIntegerName,
111         geName,
112         minusName,
113         enumFromName,
114         enumFromThenName,
115         enumFromToName,
116         enumFromThenToName,
117         fromEnumName,
118         toEnumName,
119         eqName,
120         thenMName,
121         returnMName,
122         failMName,
123         fromRationalName,
124     
125         deRefStablePtrName,
126         newStablePtrName,
127         bindIOName,
128         returnIOName,
129
130         -- Strings and lists
131         mapName,
132         appendName,
133         unpackCStringName,
134         unpackCStringAppendName,
135         unpackCStringFoldrName,
136         unpackCStringUtf8Name,
137
138         -- List operations
139         concatName,
140         filterName,
141         zipName,
142         foldrName,
143         buildName,
144         augmentName,
145
146         -- FFI primitive types that are not wired-in.
147         int8TyConName,
148         int16TyConName,
149         int32TyConName,
150         int64TyConName,
151         word8TyConName,
152         word16TyConName,
153         word32TyConName,
154         word64TyConName,
155
156         -- Others
157         otherwiseIdName,
158         plusIntegerName,
159         timesIntegerName,
160         eqStringName,
161         assertName,
162         runSTRepName
163     ]
164 \end{code}
165
166
167 %************************************************************************
168 %*                                                                      *
169 \subsection{Module names}
170 %*                                                                      *
171 %************************************************************************
172
173 \begin{code}
174 pRELUDE_Name      = mkModuleName "Prelude"
175 pREL_GHC_Name     = mkModuleName "PrelGHC"         -- Primitive types and values
176 pREL_BASE_Name    = mkModuleName "PrelBase"
177 pREL_ENUM_Name    = mkModuleName "PrelEnum"
178 pREL_SHOW_Name    = mkModuleName "PrelShow"
179 pREL_READ_Name    = mkModuleName "PrelRead"
180 pREL_NUM_Name     = mkModuleName "PrelNum"
181 pREL_LIST_Name    = mkModuleName "PrelList"
182 pREL_TUP_Name     = mkModuleName "PrelTup"
183 pREL_PACK_Name    = mkModuleName "PrelPack"
184 pREL_CONC_Name    = mkModuleName "PrelConc"
185 pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
186 pREL_ST_Name      = mkModuleName "PrelST"
187 pREL_ARR_Name     = mkModuleName "PrelArr"
188 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
189 pREL_FOREIGN_Name = mkModuleName "PrelForeign"
190 pREL_STABLE_Name  = mkModuleName "PrelStable"
191 pREL_ADDR_Name    = mkModuleName "PrelAddr"
192 pREL_ERR_Name     = mkModuleName "PrelErr"
193 pREL_REAL_Name    = mkModuleName "PrelReal"
194 pREL_FLOAT_Name   = mkModuleName "PrelFloat"
195
196 pREL_MAIN_Name    = mkModuleName "PrelMain"
197 mAIN_Name         = mkModuleName "Main"
198 iNT_Name          = mkModuleName "Int"
199 wORD_Name         = mkModuleName "Word"
200
201 pREL_GHC        = mkPrelModule pREL_GHC_Name
202 pREL_BASE       = mkPrelModule pREL_BASE_Name
203 pREL_ADDR       = mkPrelModule pREL_ADDR_Name
204 pREL_STABLE     = mkPrelModule pREL_STABLE_Name
205 pREL_IO_BASE    = mkPrelModule pREL_IO_BASE_Name
206 pREL_PACK       = mkPrelModule pREL_PACK_Name
207 pREL_ERR        = mkPrelModule pREL_ERR_Name
208 pREL_NUM        = mkPrelModule pREL_NUM_Name
209 pREL_REAL       = mkPrelModule pREL_REAL_Name
210 pREL_FLOAT      = mkPrelModule pREL_FLOAT_Name
211 \end{code}
212
213 %************************************************************************
214 %*                                                                      *
215 \subsection{Constructing the names of tuples
216 %*                                                                      *
217 %************************************************************************
218
219 \begin{code}
220 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
221
222 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
223 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
224 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
225 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
226 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
227 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
228
229 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
230 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
231 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
232 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
233 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
234 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
235
236 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
237 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
238                                           (mod, occ) -> mkOrig space mod occ
239 \end{code}
240
241
242 %************************************************************************
243 %*                                                                      *
244 \subsection{Unqualified RdrNames}
245 %*                                                                      *
246 %************************************************************************
247
248 \begin{code}
249 main_RDR_Unqual :: RdrName
250 main_RDR_Unqual = mkUnqual varName SLIT("main")
251 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
252 -- gets an Orig RdrName, and we want a Qual or Unqual one.  An Unqual
253 -- one will do fine.
254 \end{code}
255
256
257 %************************************************************************
258 %*                                                                      *
259 \subsection{Commonly-used RdrNames}
260 %*                                                                      *
261 %************************************************************************
262
263 Many of these Names are not really "built in", but some parts of the
264 compiler (notably the deriving mechanism) need to mention their names,
265 and it's convenient to write them all down in one place.
266
267 \begin{code}
268 mainName = varQual mAIN_Name SLIT("main") mainKey
269
270 -- Stuff from PrelGHC
271 usOnceTyConName  = kindQual SLIT(".") usOnceTyConKey
272 usManyTyConName  = kindQual SLIT("!") usManyTyConKey
273 superKindName    = kindQual SLIT("KX") kindConKey
274 superBoxityName  = kindQual SLIT("BX") boxityConKey
275 boxedConName     = kindQual SLIT("*") boxedConKey
276 unboxedConName   = kindQual SLIT("#") unboxedConKey
277 openKindConName  = kindQual SLIT("?") anyBoxConKey
278 usageKindConName = kindQual SLIT("$") usageConKey
279 typeConName      = kindQual SLIT("Type") typeConKey
280
281 funTyConName                  = tcQual  pREL_GHC_Name SLIT("(->)")  funTyConKey
282 charPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Char#") charPrimTyConKey 
283 intPrimTyConName              = tcQual  pREL_GHC_Name SLIT("Int#") intPrimTyConKey 
284 int64PrimTyConName            = tcQual  pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey 
285 wordPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Word#") wordPrimTyConKey 
286 word64PrimTyConName           = tcQual  pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey 
287 addrPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey 
288 floatPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Float#") floatPrimTyConKey 
289 doublePrimTyConName           = tcQual  pREL_GHC_Name SLIT("Double#") doublePrimTyConKey 
290 statePrimTyConName            = tcQual  pREL_GHC_Name SLIT("State#") statePrimTyConKey 
291 realWorldTyConName            = tcQual  pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey 
292 arrayPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey 
293 byteArrayPrimTyConName        = tcQual  pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey 
294 mutableArrayPrimTyConName     = tcQual  pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey 
295 mutableByteArrayPrimTyConName = tcQual  pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
296 mutVarPrimTyConName           = tcQual  pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey 
297 mVarPrimTyConName             = tcQual  pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey 
298 stablePtrPrimTyConName        = tcQual  pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey 
299 stableNamePrimTyConName       = tcQual  pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey 
300 foreignObjPrimTyConName       = tcQual  pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey 
301 bcoPrimTyConName              = tcQual  pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey 
302 weakPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey 
303 threadIdPrimTyConName         = tcQual  pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey 
304 cCallableClassName            = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
305 cReturnableClassName          = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
306
307 -- PrelBase data types and constructors
308 charTyConName     = tcQual   pREL_BASE_Name SLIT("Char") charTyConKey
309 charDataConName   = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
310 intTyConName      = tcQual   pREL_BASE_Name SLIT("Int") intTyConKey
311 intDataConName    = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
312 orderingTyConName = tcQual   pREL_BASE_Name SLIT("Ordering") orderingTyConKey
313 boolTyConName     = tcQual   pREL_BASE_Name SLIT("Bool") boolTyConKey
314 falseDataConName  = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
315 trueDataConName   = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
316 listTyConName     = tcQual   pREL_BASE_Name SLIT("[]") listTyConKey
317 nilDataConName    = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
318 consDataConName   = dataQual pREL_BASE_Name SLIT(":") consDataConKey
319
320 -- Generics
321 crossTyConName     = tcQual   pREL_BASE_Name SLIT(":*:") crossTyConKey
322 crossDataConName   = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
323 plusTyConName      = tcQual   pREL_BASE_Name SLIT(":+:") plusTyConKey
324 inlDataConName     = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
325 inrDataConName     = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
326 genUnitTyConName   = tcQual   pREL_BASE_Name SLIT("Unit") genUnitTyConKey
327 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
328
329 -- Random PrelBase functions
330 otherwiseIdName   = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
331 appendName        = varQual pREL_BASE_Name SLIT("++") appendIdKey
332 foldrName         = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
333 mapName           = varQual pREL_BASE_Name SLIT("map") mapIdKey
334 buildName         = varQual pREL_BASE_Name SLIT("build") buildIdKey
335 augmentName       = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
336 eqStringName      = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
337
338 -- Strings
339 unpackCStringName       = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
340 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
341 unpackCStringFoldrName  = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
342 unpackCStringUtf8Name   = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
343
344 -- Classes Eq and Ord
345 eqClassName       = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
346 ordClassName      = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
347 eqName            = varQual  pREL_BASE_Name SLIT("==") eqClassOpKey
348 geName            = varQual  pREL_BASE_Name SLIT(">=") geClassOpKey
349
350 -- Class Monad
351 monadClassName     = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
352 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
353 thenMName          = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
354 returnMName        = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
355 failMName          = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
356
357 -- Class Functor
358 functorClassName  = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
359
360 -- Class Show
361 showClassName     = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
362
363 -- Class Read
364 readClassName     = clsQual pREL_READ_Name SLIT("Read") readClassKey
365
366 -- Module PrelNum
367 numClassName      = clsQual pREL_NUM_Name SLIT("Num") numClassKey
368 fromIntName       = varQual pREL_NUM_Name SLIT("fromInt") fromIntClassOpKey
369 fromIntegerName   = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
370 minusName         = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
371 plusIntegerName   = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
372 timesIntegerName  = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
373 integerTyConName  = tcQual  pREL_NUM_Name SLIT("Integer") integerTyConKey
374 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
375 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
376
377 -- PrelReal types and classes
378 rationalTyConName   = tcQual   pREL_REAL_Name  SLIT("Rational") rationalTyConKey
379 ratioTyConName      = tcQual   pREL_REAL_Name  SLIT("Ratio") ratioTyConKey
380 ratioDataConName    = dataQual pREL_REAL_Name  SLIT(":%") ratioDataConKey
381 realClassName       = clsQual  pREL_REAL_Name  SLIT("Real") realClassKey
382 integralClassName   = clsQual  pREL_REAL_Name  SLIT("Integral") integralClassKey
383 realFracClassName   = clsQual  pREL_REAL_Name  SLIT("RealFrac") realFracClassKey
384 fractionalClassName = clsQual  pREL_REAL_Name  SLIT("Fractional") fractionalClassKey
385 fromRationalName    = varQual  pREL_REAL_Name  SLIT("fromRational") fromRationalClassOpKey
386
387 -- PrelFloat classes
388 floatTyConName     = tcQual   pREL_FLOAT_Name SLIT("Float") floatTyConKey
389 floatDataConName   = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
390 doubleTyConName    = tcQual   pREL_FLOAT_Name SLIT("Double") doubleTyConKey
391 doubleDataConName  = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
392 floatingClassName  = clsQual  pREL_FLOAT_Name SLIT("Floating") floatingClassKey
393 realFloatClassName = clsQual  pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
394
395 -- Class Ix
396 ixClassName        = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
397
398 -- Class Enum
399 enumClassName      = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
400 toEnumName         = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
401 fromEnumName       = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
402 enumFromName       = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
403 enumFromToName     = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
404 enumFromThenName   = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
405 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
406
407 -- Class Bounded
408 boundedClassName  = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
409
410 -- List functions
411 concatName        = varQual pREL_LIST_Name SLIT("concat") concatIdKey
412 filterName        = varQual pREL_LIST_Name SLIT("filter") filterIdKey
413 zipName           = varQual pREL_LIST_Name SLIT("zip") zipIdKey
414
415 -- IOBase things
416 ioTyConName       = tcQual   pREL_IO_BASE_Name SLIT("IO") ioTyConKey
417 ioDataConName     = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
418 bindIOName        = varQual  pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
419 returnIOName      = varQual  pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
420
421 -- Int, Word, and Addr things
422 int8TyConName     = tcQual iNT_Name       SLIT("Int8") int8TyConKey
423 int16TyConName    = tcQual iNT_Name       SLIT("Int16") int16TyConKey
424 int32TyConName    = tcQual iNT_Name       SLIT("Int32") int32TyConKey
425 int64TyConName    = tcQual pREL_ADDR_Name SLIT("Int64") int64TyConKey
426
427 wordTyConName     = tcQual   pREL_ADDR_Name SLIT("Word") wordTyConKey
428 wordDataConName   = dataQual pREL_ADDR_Name SLIT("W#") wordDataConKey
429 word8TyConName    = tcQual   wORD_Name      SLIT("Word8") word8TyConKey
430 word16TyConName   = tcQual   wORD_Name      SLIT("Word16") word16TyConKey
431 word32TyConName   = tcQual   wORD_Name      SLIT("Word32") word32TyConKey
432 word64TyConName   = tcQual   pREL_ADDR_Name SLIT("Word64") word64TyConKey
433
434 addrTyConName     = tcQual   pREL_ADDR_Name SLIT("Addr") addrTyConKey
435 addrDataConName   = dataQual pREL_ADDR_Name SLIT("A#") addrDataConKey
436
437
438 -- Byte array types
439 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  SLIT("ByteArray") byteArrayTyConKey
440 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray") mutableByteArrayTyConKey
441
442 -- Forign objects and weak pointers
443 foreignObjTyConName   = tcQual   pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjTyConKey
444 foreignObjDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjDataConKey
445 stablePtrTyConName    = tcQual   pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
446 stablePtrDataConName  = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
447 deRefStablePtrName    = varQual  pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
448 newStablePtrName      = varQual  pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
449
450 errorName          = varQual pREL_ERR_Name SLIT("error") errorIdKey
451 assertName         = varQual pREL_GHC_Name SLIT("assert") assertIdKey
452 getTagName         = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
453 runSTRepName       = varQual pREL_ST_Name  SLIT("runSTRep") runSTRepIdKey
454 \end{code}
455
456 %************************************************************************
457 %*                                                                      *
458 \subsection{Known names}
459 %*                                                                      *
460 %************************************************************************
461
462 The following names are known to the compiler, but they don't require
463 pre-assigned keys.  Mostly these names are used in generating deriving
464 code, which is passed through the renamer anyway.
465
466         THEY ARE ALL ORIGINAL NAMES, HOWEVER
467
468 \begin{code}
469 -- Lists and tuples
470 tupleCon_RDR, tupleTyCon_RDR            :: Int -> RdrName
471 ubxTupleCon_RDR, ubxTupleTyCon_RDR      :: Int -> RdrName
472
473 tupleCon_RDR      = mkTupConRdrName dataName Boxed  
474 tupleTyCon_RDR    = mkTupConRdrName tcName   Boxed  
475 ubxTupleCon_RDR   = mkTupConRdrName dataName Unboxed
476 ubxTupleTyCon_RDR = mkTupConRdrName tcName   Unboxed
477
478 unitCon_RDR       = dataQual_RDR pREL_BASE_Name SLIT("()")
479 unitTyCon_RDR     = tcQual_RDR   pREL_BASE_Name SLIT("()")
480
481 and_RDR            = varQual_RDR  pREL_BASE_Name SLIT("&&")
482 not_RDR            = varQual_RDR  pREL_BASE_Name SLIT("not")
483 compose_RDR        = varQual_RDR  pREL_BASE_Name SLIT(".")
484 ne_RDR             = varQual_RDR  pREL_BASE_Name SLIT("/=")
485 le_RDR             = varQual_RDR  pREL_BASE_Name SLIT("<=")
486 lt_RDR             = varQual_RDR  pREL_BASE_Name SLIT("<")
487 gt_RDR             = varQual_RDR  pREL_BASE_Name SLIT(">")
488 ltTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("LT")
489 eqTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("EQ")
490 gtTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("GT")
491 max_RDR            = varQual_RDR  pREL_BASE_Name SLIT("max")
492 min_RDR            = varQual_RDR  pREL_BASE_Name SLIT("min")
493 compare_RDR        = varQual_RDR  pREL_BASE_Name SLIT("compare")
494 showList_RDR       = varQual_RDR  pREL_SHOW_Name SLIT("showList")
495 showList___RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showList__")
496 showsPrec_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showsPrec")
497 showSpace_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showSpace")
498 showString_RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showString")
499 showParen_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showParen")
500 readsPrec_RDR      = varQual_RDR  pREL_READ_Name SLIT("readsPrec")
501 readList_RDR       = varQual_RDR  pREL_READ_Name SLIT("readList")
502 readParen_RDR      = varQual_RDR  pREL_READ_Name SLIT("readParen")
503 lex_RDR            = varQual_RDR  pREL_READ_Name SLIT("lex")
504 readList___RDR     = varQual_RDR  pREL_READ_Name SLIT("readList__")
505 times_RDR          = varQual_RDR  pREL_NUM_Name SLIT("*")
506 plus_RDR           = varQual_RDR  pREL_NUM_Name SLIT("+")
507 negate_RDR         = varQual_RDR  pREL_NUM_Name SLIT("negate")
508 range_RDR          = varQual_RDR  pREL_ARR_Name SLIT("range")
509 index_RDR          = varQual_RDR  pREL_ARR_Name SLIT("index")
510 inRange_RDR        = varQual_RDR  pREL_ARR_Name SLIT("inRange")
511 succ_RDR           = varQual_RDR  pREL_ENUM_Name SLIT("succ")
512 pred_RDR           = varQual_RDR  pREL_ENUM_Name SLIT("pred")
513 minBound_RDR       = varQual_RDR  pREL_ENUM_Name SLIT("minBound")
514 maxBound_RDR       = varQual_RDR  pREL_ENUM_Name SLIT("maxBound")
515 assertErr_RDR      = varQual_RDR  pREL_ERR_Name SLIT("assertError")
516 \end{code}
517
518 These RDR names also have known keys, so we need to get back the RDR names to
519 populate the occurrence list above.
520
521 \begin{code}
522 funTyCon_RDR            = nameRdrName funTyConName
523 nilCon_RDR              = nameRdrName nilDataConName
524 listTyCon_RDR           = nameRdrName listTyConName
525 ioTyCon_RDR             = nameRdrName ioTyConName
526 intTyCon_RDR            = nameRdrName intTyConName
527 eq_RDR                  = nameRdrName eqName
528 ge_RDR                  = nameRdrName geName
529 numClass_RDR            = nameRdrName numClassName
530 ordClass_RDR            = nameRdrName ordClassName
531 map_RDR                 = nameRdrName mapName
532 append_RDR              = nameRdrName appendName
533 foldr_RDR               = nameRdrName foldrName
534 build_RDR               = nameRdrName buildName
535 enumFromTo_RDR          = nameRdrName enumFromToName
536 returnM_RDR             = nameRdrName returnMName
537 thenM_RDR               = nameRdrName thenMName
538 failM_RDR               = nameRdrName failMName
539 false_RDR               = nameRdrName falseDataConName
540 true_RDR                = nameRdrName trueDataConName
541 error_RDR               = nameRdrName errorName
542 getTag_RDR              = nameRdrName getTagName
543 fromEnum_RDR            = nameRdrName fromEnumName
544 toEnum_RDR              = nameRdrName toEnumName
545 enumFrom_RDR            = nameRdrName enumFromName
546 mkInt_RDR               = nameRdrName intDataConName
547 enumFromThen_RDR        = nameRdrName enumFromThenName
548 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
549 ratioDataCon_RDR        = nameRdrName ratioDataConName
550 plusInteger_RDR         = nameRdrName plusIntegerName
551 timesInteger_RDR        = nameRdrName timesIntegerName
552 enumClass_RDR           = nameRdrName enumClassName
553 monadClass_RDR          = nameRdrName monadClassName
554 ioDataCon_RDR           = nameRdrName ioDataConName
555 cCallableClass_RDR      = nameRdrName cCallableClassName
556 cReturnableClass_RDR    = nameRdrName cReturnableClassName
557 eqClass_RDR             = nameRdrName eqClassName
558 eqString_RDR            = nameRdrName eqStringName
559 unpackCString_RDR       = nameRdrName unpackCStringName
560 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
561 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
562 deRefStablePtr_RDR      = nameRdrName deRefStablePtrName
563 newStablePtr_RDR        = nameRdrName newStablePtrName
564 bindIO_RDR              = nameRdrName bindIOName
565 returnIO_RDR            = nameRdrName returnIOName
566 fromInteger_RDR         = nameRdrName fromIntegerName
567 fromRational_RDR        = nameRdrName fromRationalName
568 minus_RDR               = nameRdrName minusName
569 \end{code}
570
571 %************************************************************************
572 %*                                                                      *
573 \subsection{Local helpers}
574 %*                                                                      *
575 %************************************************************************
576
577 All these are original names; hence mkOrig
578
579 \begin{code}
580 varQual  mod str uq = mkKnownKeyGlobal (varQual_RDR  mod str) uq
581 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
582 tcQual   mod str uq = mkKnownKeyGlobal (tcQual_RDR   mod str) uq
583 clsQual  mod str uq = mkKnownKeyGlobal (clsQual_RDR  mod str) uq
584
585 kindQual str uq = mkKnownKeyGlobal (mkRdrOrig pREL_GHC_Name (mkKindOccFS tcName str)) uq
586         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
587         -- And they all come from PrelGHC
588
589 varQual_RDR  mod str = mkOrig varName  mod str
590 tcQual_RDR   mod str = mkOrig tcName   mod str
591 clsQual_RDR  mod str = mkOrig clsName  mod str
592 dataQual_RDR mod str = mkOrig dataName mod str
593 \end{code}
594
595 %************************************************************************
596 %*                                                                      *
597 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
598 %*                                                                      *
599 %************************************************************************
600
601 \begin{code}
602 boundedClassKey         = mkPreludeClassUnique 1 
603 enumClassKey            = mkPreludeClassUnique 2 
604 eqClassKey              = mkPreludeClassUnique 3 
605 floatingClassKey        = mkPreludeClassUnique 5 
606 fractionalClassKey      = mkPreludeClassUnique 6 
607 integralClassKey        = mkPreludeClassUnique 7 
608 monadClassKey           = mkPreludeClassUnique 8 
609 monadPlusClassKey       = mkPreludeClassUnique 9
610 functorClassKey         = mkPreludeClassUnique 10
611 numClassKey             = mkPreludeClassUnique 11
612 ordClassKey             = mkPreludeClassUnique 12
613 readClassKey            = mkPreludeClassUnique 13
614 realClassKey            = mkPreludeClassUnique 14
615 realFloatClassKey       = mkPreludeClassUnique 15
616 realFracClassKey        = mkPreludeClassUnique 16
617 showClassKey            = mkPreludeClassUnique 17
618                                                
619 cCallableClassKey       = mkPreludeClassUnique 18
620 cReturnableClassKey     = mkPreludeClassUnique 19
621
622 ixClassKey              = mkPreludeClassUnique 20
623 \end{code}
624
625 %************************************************************************
626 %*                                                                      *
627 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
628 %*                                                                      *
629 %************************************************************************
630
631 \begin{code}
632 addrPrimTyConKey                        = mkPreludeTyConUnique  1
633 addrTyConKey                            = mkPreludeTyConUnique  2
634 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
635 boolTyConKey                            = mkPreludeTyConUnique  4
636 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
637 charPrimTyConKey                        = mkPreludeTyConUnique  7
638 charTyConKey                            = mkPreludeTyConUnique  8
639 doublePrimTyConKey                      = mkPreludeTyConUnique  9
640 doubleTyConKey                          = mkPreludeTyConUnique 10 
641 floatPrimTyConKey                       = mkPreludeTyConUnique 11
642 floatTyConKey                           = mkPreludeTyConUnique 12
643 funTyConKey                             = mkPreludeTyConUnique 13
644 intPrimTyConKey                         = mkPreludeTyConUnique 14
645 intTyConKey                             = mkPreludeTyConUnique 15
646 int8TyConKey                            = mkPreludeTyConUnique 16
647 int16TyConKey                           = mkPreludeTyConUnique 17
648 int32TyConKey                           = mkPreludeTyConUnique 18
649 int64PrimTyConKey                       = mkPreludeTyConUnique 19
650 int64TyConKey                           = mkPreludeTyConUnique 20
651 integerTyConKey                         = mkPreludeTyConUnique 21
652 listTyConKey                            = mkPreludeTyConUnique 22
653 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 23
654 foreignObjTyConKey                      = mkPreludeTyConUnique 24
655 weakPrimTyConKey                        = mkPreludeTyConUnique 25
656 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 26
657 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 27
658 orderingTyConKey                        = mkPreludeTyConUnique 28
659 mVarPrimTyConKey                        = mkPreludeTyConUnique 29
660 ratioTyConKey                           = mkPreludeTyConUnique 30
661 rationalTyConKey                        = mkPreludeTyConUnique 31
662 realWorldTyConKey                       = mkPreludeTyConUnique 32
663 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 33
664 stablePtrTyConKey                       = mkPreludeTyConUnique 34
665 statePrimTyConKey                       = mkPreludeTyConUnique 35
666 stableNamePrimTyConKey                  = mkPreludeTyConUnique 50
667 stableNameTyConKey                      = mkPreludeTyConUnique 51
668 mutableByteArrayTyConKey                = mkPreludeTyConUnique 52
669 mutVarPrimTyConKey                      = mkPreludeTyConUnique 53
670 ioTyConKey                              = mkPreludeTyConUnique 55
671 byteArrayTyConKey                       = mkPreludeTyConUnique 56
672 wordPrimTyConKey                        = mkPreludeTyConUnique 57
673 wordTyConKey                            = mkPreludeTyConUnique 58
674 word8TyConKey                           = mkPreludeTyConUnique 59
675 word16TyConKey                          = mkPreludeTyConUnique 60
676 word32TyConKey                          = mkPreludeTyConUnique 61
677 word64PrimTyConKey                      = mkPreludeTyConUnique 62
678 word64TyConKey                          = mkPreludeTyConUnique 63
679 boxedConKey                             = mkPreludeTyConUnique 64
680 unboxedConKey                           = mkPreludeTyConUnique 65
681 anyBoxConKey                            = mkPreludeTyConUnique 66
682 kindConKey                              = mkPreludeTyConUnique 67
683 boxityConKey                            = mkPreludeTyConUnique 68
684 typeConKey                              = mkPreludeTyConUnique 69
685 threadIdPrimTyConKey                    = mkPreludeTyConUnique 70
686 bcoPrimTyConKey                         = mkPreludeTyConUnique 71
687
688 -- Usage type constructors
689 usageConKey                             = mkPreludeTyConUnique 72
690 usOnceTyConKey                          = mkPreludeTyConUnique 73
691 usManyTyConKey                          = mkPreludeTyConUnique 74
692
693 -- Generic Type Constructors
694 crossTyConKey                           = mkPreludeTyConUnique 75
695 plusTyConKey                            = mkPreludeTyConUnique 76
696 genUnitTyConKey                         = mkPreludeTyConUnique 77
697 \end{code}
698
699 %************************************************************************
700 %*                                                                      *
701 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
702 %*                                                                      *
703 %************************************************************************
704
705 \begin{code}
706 addrDataConKey                          = mkPreludeDataConUnique  0
707 charDataConKey                          = mkPreludeDataConUnique  1
708 consDataConKey                          = mkPreludeDataConUnique  2
709 doubleDataConKey                        = mkPreludeDataConUnique  3
710 falseDataConKey                         = mkPreludeDataConUnique  4
711 floatDataConKey                         = mkPreludeDataConUnique  5
712 intDataConKey                           = mkPreludeDataConUnique  6
713 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
714 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
715 foreignObjDataConKey                    = mkPreludeDataConUnique  9
716 nilDataConKey                           = mkPreludeDataConUnique 10
717 ratioDataConKey                         = mkPreludeDataConUnique 11
718 stablePtrDataConKey                     = mkPreludeDataConUnique 12
719 stableNameDataConKey                    = mkPreludeDataConUnique 13
720 trueDataConKey                          = mkPreludeDataConUnique 14
721 wordDataConKey                          = mkPreludeDataConUnique 15
722 ioDataConKey                            = mkPreludeDataConUnique 16
723
724 -- Generic data constructors
725 crossDataConKey                         = mkPreludeDataConUnique 17
726 inlDataConKey                           = mkPreludeDataConUnique 18
727 inrDataConKey                           = mkPreludeDataConUnique 19
728 genUnitDataConKey                       = mkPreludeDataConUnique 20
729 \end{code}
730
731 %************************************************************************
732 %*                                                                      *
733 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
734 %*                                                                      *
735 %************************************************************************
736
737 \begin{code}
738 absentErrorIdKey              = mkPreludeMiscIdUnique  1
739 appendIdKey                   = mkPreludeMiscIdUnique  2
740 augmentIdKey                  = mkPreludeMiscIdUnique  3
741 buildIdKey                    = mkPreludeMiscIdUnique  4
742 errorIdKey                    = mkPreludeMiscIdUnique  5
743 foldlIdKey                    = mkPreludeMiscIdUnique  6
744 foldrIdKey                    = mkPreludeMiscIdUnique  7
745 recSelErrIdKey                = mkPreludeMiscIdUnique  8
746 integerMinusOneIdKey          = mkPreludeMiscIdUnique  9
747 integerPlusOneIdKey           = mkPreludeMiscIdUnique 10
748 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 11
749 integerZeroIdKey              = mkPreludeMiscIdUnique 12
750 int2IntegerIdKey              = mkPreludeMiscIdUnique 13
751 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 15
752 eqStringIdKey                 = mkPreludeMiscIdUnique 16
753 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
754 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
755 parErrorIdKey                 = mkPreludeMiscIdUnique 20
756 parIdKey                      = mkPreludeMiscIdUnique 21
757 patErrorIdKey                 = mkPreludeMiscIdUnique 22
758 realWorldPrimIdKey            = mkPreludeMiscIdUnique 23
759 recConErrorIdKey              = mkPreludeMiscIdUnique 24
760 recUpdErrorIdKey              = mkPreludeMiscIdUnique 25
761 traceIdKey                    = mkPreludeMiscIdUnique 26
762 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 27
763 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 28
764 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 29
765 unpackCStringIdKey            = mkPreludeMiscIdUnique 30
766 ushowListIdKey                = mkPreludeMiscIdUnique 31
767 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
768 concatIdKey                   = mkPreludeMiscIdUnique 33
769 filterIdKey                   = mkPreludeMiscIdUnique 34
770 zipIdKey                      = mkPreludeMiscIdUnique 35
771 bindIOIdKey                   = mkPreludeMiscIdUnique 36
772 returnIOIdKey                 = mkPreludeMiscIdUnique 37
773 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
774 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
775 getTagIdKey                   = mkPreludeMiscIdUnique 40
776 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
777 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
778 \end{code}
779
780 Certain class operations from Prelude classes.  They get their own
781 uniques so we can look them up easily when we want to conjure them up
782 during type checking.
783
784 \begin{code}
785 fromIntClassOpKey             = mkPreludeMiscIdUnique 101
786 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
787 minusClassOpKey               = mkPreludeMiscIdUnique 103
788 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
789 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
790 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
791 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
792 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
793 eqClassOpKey                  = mkPreludeMiscIdUnique 109
794 geClassOpKey                  = mkPreludeMiscIdUnique 110
795 failMClassOpKey               = mkPreludeMiscIdUnique 112
796 thenMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
797         -- Just a place holder for  unbound variables  produced by the renamer:
798 unboundKey                    = mkPreludeMiscIdUnique 114 
799 fromEnumClassOpKey            = mkPreludeMiscIdUnique 115
800                               
801 mainKey                       = mkPreludeMiscIdUnique 116
802 returnMClassOpKey             = mkPreludeMiscIdUnique 117
803 otherwiseIdKey                = mkPreludeMiscIdUnique 118
804 toEnumClassOpKey              = mkPreludeMiscIdUnique 119
805 mapIdKey                      = mkPreludeMiscIdUnique 120
806 \end{code}
807
808 \begin{code}
809 assertIdKey                   = mkPreludeMiscIdUnique 121
810 runSTRepIdKey                 = mkPreludeMiscIdUnique 122
811 \end{code}
812
813
814 %************************************************************************
815 %*                                                                      *
816 \subsection{Standard groups of types}
817 %*                                                                      *
818 %************************************************************************
819
820 \begin{code}
821 numericTyKeys = 
822         [ addrTyConKey
823         , wordTyConKey
824         , intTyConKey
825         , integerTyConKey
826         , doubleTyConKey
827         , floatTyConKey
828         ]
829
830         -- Renamer always imports these data decls replete with constructors
831         -- so that desugarer can always see their constructors.  Ugh!
832 cCallishTyKeys = 
833         [ addrTyConKey
834         , wordTyConKey
835         , byteArrayTyConKey
836         , mutableByteArrayTyConKey
837         , foreignObjTyConKey
838         , stablePtrTyConKey
839         , int8TyConKey
840         , int16TyConKey
841         , int32TyConKey
842         , int64TyConKey
843         , word8TyConKey
844         , word16TyConKey
845         , word32TyConKey
846         , word64TyConKey
847         ]
848 \end{code}
849
850
851 %************************************************************************
852 %*                                                                      *
853 \subsection[Class-std-groups]{Standard groups of Prelude classes}
854 %*                                                                      *
855 %************************************************************************
856
857 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
858 (@TcDeriv@).
859
860 @derivingOccurrences@ maps a class name to a list of the (qualified)
861 occurrences that will be mentioned by the derived code for the class
862 when it is later generated.  We don't need to put in things that are
863 WiredIn (because they are already mapped to their correct name by the
864 @NameSupply@.  The class itself, and all its class ops, is already
865 flagged as an occurrence so we don't need to mention that either.
866
867 @derivingOccurrences@ has an item for every derivable class, even if
868 that item is empty, because we treat lookup failure as indicating that
869 the class is illegal in a deriving clause.
870
871 \begin{code}
872 derivingOccurrences :: UniqFM [RdrName]
873 derivingOccurrences = listToUFM deriving_occ_info
874
875 derivableClassKeys  = map fst deriving_occ_info
876
877 deriving_occ_info
878   = [ (eqClassKey,      [intTyCon_RDR, and_RDR, not_RDR])
879     , (ordClassKey,     [intTyCon_RDR, compose_RDR, eqTag_RDR])
880                                 -- EQ (from Ordering) is needed to force in the constructors
881                                 -- as well as the type constructor.
882     , (enumClassKey,    [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
883                                 -- The last two Enum deps are only used to produce better
884                                 -- error msgs for derived toEnum methods.
885     , (boundedClassKey, [intTyCon_RDR])
886     , (showClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, 
887                          showParen_RDR, showSpace_RDR, showList___RDR])
888     , (readClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
889                          foldr_RDR, build_RDR,
890                              -- foldr and build required for list comprehension
891                              -- KSW 2000-06
892                          lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
893                              -- returnM (and the rest of the Monad class decl) 
894                              -- will be forced in as result of depending
895                              -- on thenM.   -- SOF 1/99
896     , (ixClassKey,      [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
897                          foldr_RDR, build_RDR,
898                              -- foldr and build required for list comprehension used
899                              -- with single constructor types  -- KSW 2000-06
900                          returnM_RDR, failM_RDR])
901                              -- the last two are needed to force returnM, thenM and failM
902                              -- in before typechecking the list(monad) comprehension
903                              -- generated for derived Ix instances (range method)
904                              -- of single constructor types.  -- SOF 8/97
905     ]
906         -- intTyCon: Practically any deriving needs Int, either for index calculations, 
907         --              or for taggery.
908         -- ordClass: really it's the methods that are actually used.
909         -- numClass: for Int literals
910 \end{code}
911
912
913 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
914 even though every numeric class has these two as a superclass,
915 because the list of ambiguous dictionaries hasn't been simplified.
916
917 \begin{code}
918 numericClassKeys =
919         [ numClassKey
920         , realClassKey
921         , integralClassKey
922         ]
923         ++ fractionalClassKeys
924
925 fractionalClassKeys = 
926         [ fractionalClassKey
927         , floatingClassKey
928         , realFracClassKey
929         , realFloatClassKey
930         ]
931
932         -- the strictness analyser needs to know about numeric types
933         -- (see SaAbsInt.lhs)
934 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
935         [ readClassKey
936         ]
937
938 cCallishClassKeys = 
939         [ cCallableClassKey
940         , cReturnableClassKey
941         ]
942
943 standardClassKeys
944   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
945     --
946     -- We have to have "CCallable" and "CReturnable" in the standard
947     -- classes, so that if you go...
948     --
949     --      _ccall_ foo ... 93{-numeric literal-} ...
950     --
951     -- ... it can do The Right Thing on the 93.
952
953 noDictClassKeys         -- These classes are used only for type annotations;
954                         -- they are not implemented by dictionaries, ever.
955   = cCallishClassKeys
956 \end{code}
957
958 \begin{code}
959 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
960 -- during compiler debugging.
961 mkUnboundName :: RdrName -> Name
962 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
963
964 isUnboundName :: Name -> Bool
965 isUnboundName name = name `hasKey` unboundKey
966 \end{code}