%
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
-\section[Unique]{The @Unique@ data type}
@Uniques@ are used to distinguish entities in the compiler (@Ids@,
@Classes@, etc.) from each other. Thus, @Uniques@ are the basic
\begin{code}
module Unique (
- Unique, Uniquable(..),
+ Unique, Uniquable(..), hasKey,
u2i, -- hack: used in UniqFM
- pprUnique, pprUnique10, showUnique,
+ pprUnique, pprUnique10,
mkUnique, -- Used in UniqSupply
mkUniqueGrimily, -- Used in UniqSupply only!
+ getKey, -- Used in Var only!
incrUnique, -- Used for renumbering
- initTyVarUnique, mkTyVarUnique,
+ deriveUnique, -- Ditto
+ initTyVarUnique,
initTidyUniques,
+ isTupleKey,
+
-- now all the built-in Uniques (and functions to make them)
-- [the Oh-So-Wonderful Haskell module system wins again...]
mkAlphaTyVarUnique,
addrDataConKey,
addrPrimTyConKey,
addrTyConKey,
- andandIdKey,
appendIdKey,
arrayPrimTyConKey,
+ assertIdKey,
augmentIdKey,
+ bindIOIdKey,
boolTyConKey,
boundedClassKey,
- buildDataConKey,
+ boxedConKey,
buildIdKey,
byteArrayPrimTyConKey,
+ byteArrayTyConKey,
cCallableClassKey,
cReturnableClassKey,
charDataConKey,
charPrimTyConKey,
charTyConKey,
- composeIdKey,
+ concatIdKey,
consDataConKey,
+ deRefStablePtrIdKey,
doubleDataConKey,
doublePrimTyConKey,
doubleTyConKey,
enumFromToClassOpKey,
eqClassKey,
eqClassOpKey,
- eqDataConKey,
errorIdKey,
- evalClassKey,
falseDataConKey,
+ failMClassOpKey,
+ filterIdKey,
floatDataConKey,
floatPrimTyConKey,
floatTyConKey,
foreignObjDataConKey,
foreignObjPrimTyConKey,
foreignObjTyConKey,
- forkIdKey,
fractionalClassKey,
fromEnumClassOpKey,
fromIntClassOpKey,
funTyConKey,
functorClassKey,
geClassOpKey,
- gtDataConKey,
+ getTagIdKey,
intDataConKey,
intPrimTyConKey,
intTyConKey,
- integerDataConKey,
+ int8TyConKey,
+ int16TyConKey,
+ int32TyConKey,
+ int64PrimTyConKey,
+ int64TyConKey,
+ smallIntegerDataConKey,
+ largeIntegerDataConKey,
integerMinusOneIdKey,
integerPlusOneIdKey,
integerPlusTwoIdKey,
+ int2IntegerIdKey,
+ addr2IntegerIdKey,
integerTyConKey,
integerZeroIdKey,
integralClassKey,
irrefutPatErrorIdKey,
ixClassKey,
- lexIdKey,
- liftDataConKey,
- liftTyConKey,
listTyConKey,
- ltDataConKey,
mainKey,
+ makeStablePtrIdKey,
+ mapIdKey,
minusClassOpKey,
monadClassKey,
monadPlusClassKey,
- monadZeroClassKey,
mutableArrayPrimTyConKey,
mutableByteArrayPrimTyConKey,
+ mutableByteArrayTyConKey,
+ mutVarPrimTyConKey,
nilDataConKey,
noMethodBindingErrorIdKey,
nonExhaustiveGuardsErrorIdKey,
- notIdKey,
numClassKey,
+ anyBoxConKey,
ordClassKey,
orderingTyConKey,
otherwiseIdKey,
- packCStringIdKey,
parErrorIdKey,
parIdKey,
patErrorIdKey,
ratioTyConKey,
rationalTyConKey,
readClassKey,
- readParenIdKey,
realClassKey,
realFloatClassKey,
realFracClassKey,
realWorldPrimIdKey,
realWorldTyConKey,
recConErrorIdKey,
+ recSelErrIdKey,
recUpdErrorIdKey,
- return2GMPsDataConKey,
- return2GMPsTyConKey,
- returnIntAndGMPDataConKey,
- returnIntAndGMPTyConKey,
+ returnIOIdKey,
returnMClassOpKey,
- seqIdKey,
+ runSTRepIdKey,
showClassKey,
- showParenIdKey,
- showSpaceIdKey,
- showStringIdKey,
- stTyConKey,
- stDataConKey,
ioTyConKey,
ioDataConKey,
- ioResultTyConKey,
- ioOkDataConKey,
- ioFailDataConKey,
stablePtrDataConKey,
stablePtrPrimTyConKey,
stablePtrTyConKey,
- stateAndAddrPrimDataConKey,
- stateAndAddrPrimTyConKey,
- stateAndArrayPrimDataConKey,
- stateAndArrayPrimTyConKey,
- stateAndByteArrayPrimDataConKey,
- stateAndByteArrayPrimTyConKey,
- stateAndCharPrimDataConKey,
- stateAndCharPrimTyConKey,
- stateAndDoublePrimDataConKey,
- stateAndDoublePrimTyConKey,
- stateAndFloatPrimDataConKey,
- stateAndFloatPrimTyConKey,
- stateAndForeignObjPrimDataConKey,
- stateAndForeignObjPrimTyConKey,
- stateAndIntPrimDataConKey,
- stateAndIntPrimTyConKey,
- stateAndMutableArrayPrimDataConKey,
- stateAndMutableArrayPrimTyConKey,
- stateAndMutableByteArrayPrimDataConKey,
- stateAndMutableByteArrayPrimTyConKey,
- stateAndPtrPrimDataConKey,
- stateAndPtrPrimTyConKey,
- stateAndStablePtrPrimDataConKey,
- stateAndStablePtrPrimTyConKey,
- stateAndSynchVarPrimDataConKey,
- stateAndSynchVarPrimTyConKey,
- stateAndWordPrimDataConKey,
- stateAndWordPrimTyConKey,
- stateDataConKey,
- stRetDataConKey,
+ stableNameDataConKey,
+ stableNamePrimTyConKey,
+ stableNameTyConKey,
+
statePrimTyConKey,
- stateTyConKey,
- stRetTyConKey,
- synchVarPrimTyConKey,
+ typeConKey,
+ kindConKey,
+ boxityConKey,
+ mVarPrimTyConKey,
thenMClassOpKey,
+ threadIdPrimTyConKey,
toEnumClassOpKey,
traceIdKey,
trueDataConKey,
+ unboundKey,
+ unboxedConKey,
unpackCString2IdKey,
unpackCStringAppendIdKey,
unpackCStringFoldrIdKey,
unpackCStringIdKey,
- ureadListIdKey,
+ unsafeCoerceIdKey,
ushowListIdKey,
- voidIdKey,
- voidTyConKey,
+ weakPrimTyConKey,
wordDataConKey,
wordPrimTyConKey,
wordTyConKey,
- zeroClassOpKey
- , copyableIdKey
- , noFollowIdKey
- , parAtAbsIdKey
- , parAtForNowIdKey
- , parAtIdKey
- , parAtRelIdKey
- , parGlobalIdKey
- , parLocalIdKey
- , unboundKey
- , byteArrayTyConKey
- , mutableByteArrayTyConKey
- , allClassKey
+ word8TyConKey,
+ word16TyConKey,
+ word32TyConKey,
+ word64PrimTyConKey,
+ word64TyConKey,
+ zipIdKey
) where
#include "HsVersions.h"
-import FastString ( uniqueOfFS )
+import BasicTypes ( Boxity(..) )
+import FastString ( FastString, uniqueOfFS )
import GlaExts
import ST
import PrelBase ( Char(..), chr, ord )
import Outputable
-import Util
\end{code}
%************************************************************************
mkUniqueGrimily :: Int# -> Unique -- A trap-door for UniqSupply
+getKey :: Unique -> Int# -- for Var
+
incrUnique :: Unique -> Unique
+deriveUnique :: Unique -> Int -> Unique
+
+isTupleKey :: Unique -> Bool
\end{code}
\begin{code}
mkUniqueGrimily x = MkUnique x
+{-# INLINE getKey #-}
+getKey (MkUnique x) = x
+
incrUnique (MkUnique i) = MkUnique (i +# 1#)
+-- deriveUnique uses an 'X' tag so that it won't clash with
+-- any of the uniques produced any other way
+deriveUnique (MkUnique i) delta = mkUnique 'X' (I# i + delta)
+
-- pop the Char in the top 8 bits of the Unique(Supply)
-- No 64-bit bugs here, as long as we have at least 32 bits. --JSM
i2w_s x = (x::Int#)
mkUnique (C# c) (I# i)
- = MkUnique (w2i (((i2w (ord# c)) `shiftL#` (i2w_s 24#)) `or#` (i2w i)))
+ = MkUnique (w2i (tag `or#` bits))
+ where
+ tag = i2w (ord# c) `shiftL#` i2w_s 24#
+ bits = i2w i `and#` (i2w 16777215#){-``0x00ffffff''-}
unpkUnique (MkUnique u)
= let
tag = C# (chr# (w2i ((i2w u) `shiftr` (i2w_s 24#))))
- i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
+ i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
in
(tag, i)
where
- shiftr x y = shiftRA# x y
+ shiftr x y = shiftRL# x y
\end{code}
\begin{code}
class Uniquable a where
- uniqueOf :: a -> Unique
+ getUnique :: a -> Unique
+
+hasKey :: Uniquable a => a -> Unique -> Bool
+x `hasKey` k = getUnique x == k
instance Uniquable FastString where
- uniqueOf fs = mkUniqueGrimily (uniqueOfFS fs)
+ getUnique fs = mkUniqueGrimily (uniqueOfFS fs)
instance Uniquable Int where
- uniqueOf (I# i#) = mkUniqueGrimily i#
+ getUnique (I# i#) = mkUniqueGrimily i#
\end{code}
-----------------
instance Uniquable Unique where
- uniqueOf u = u
+ getUnique u = u
\end{code}
We do sometimes make strings with @Uniques@ in them:
char (chr (ord 'a' + u))
finish_ppr tag u pp_u = char tag <> pp_u
-showUnique :: Unique -> String
-showUnique uniq = showSDoc (pprUnique uniq)
-
instance Outputable Unique where
ppr u = pprUnique u
-instance Text Unique where
- showsPrec p uniq rest = showUnique uniq
+instance Show Unique where
+ showsPrec p uniq = showsPrecSDoc p (pprUnique uniq)
\end{code}
%************************************************************************
iToBase62 n@(I# n#)
= ASSERT(n >= 0)
let
+#if __GLASGOW_HASKELL__ < 405
bytes = case chars62 of { BYTE_ARRAY bounds_who_needs_'em bytes -> bytes }
+#else
+ bytes = case chars62 of { BYTE_ARRAY _ _ bytes -> bytes }
+#endif
in
if n# <# 62# then
case (indexCharArray# bytes n#) of { c ->
other a-z: lower case chars for unique supplies (see Main.lhs)
B: builtin
C-E: pseudo uniques (used in native-code generator)
+ X: uniques derived by deriveUnique
_: unifiable tyvars (above)
- 1-8: prelude things below
+ 0-9: prelude things below
\begin{code}
-mkAlphaTyVarUnique i = mkUnique '1' i
+mkAlphaTyVarUnique i = mkUnique '1' i
mkPreludeClassUnique i = mkUnique '2' i
mkPreludeTyConUnique i = mkUnique '3' i
-mkTupleTyConUnique a = mkUnique '4' a
+mkTupleTyConUnique Boxed a = mkUnique '4' a
+mkTupleTyConUnique Unboxed a = mkUnique '5' a
-mkPreludeDataConUnique i = mkUnique '5' i -- must be alphabetic
-mkTupleDataConUnique a = mkUnique '6' a -- ditto (*may* be used in C labels)
+-- Data constructor keys occupy *two* slots. The first is used for the
+-- data constructor itself and its wrapper function (the function that
+-- evaluates arguments as necessary and calls the worker). The second is
+-- used for the worker function (the function that builds the constructor
+-- representation).
-mkPrimOpIdUnique op = mkUnique '7' op
-mkPreludeMiscIdUnique i = mkUnique '8' i
+mkPreludeDataConUnique i = mkUnique '6' (2*i) -- Must be alphabetic
+mkTupleDataConUnique Boxed a = mkUnique '7' (2*a) -- ditto (*may* be used in C labels)
+mkTupleDataConUnique Unboxed a = mkUnique '8' (2*a)
+
+-- This one is used for a tiresome reason
+-- to improve a consistency-checking error check in the renamer
+isTupleKey u = case unpkUnique u of
+ (tag,_) -> tag == '4' || tag == '5' || tag == '7' || tag == '8'
+
+mkPrimOpIdUnique op = mkUnique '9' op
+mkPreludeMiscIdUnique i = mkUnique '0' i
-- The "tyvar uniques" print specially nicely: a, b, c, etc.
-- See pprUnique for details
initTyVarUnique :: Unique
initTyVarUnique = mkUnique 't' 0
-mkTyVarUnique :: Int -> Unique
-mkTyVarUnique n = mkUnique 't' n
-
initTidyUniques :: (Unique, Unique) -- Global and local
initTidyUniques = (mkUnique 'g' 0, mkUnique 'x' 0)
-mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
- mkBuiltinUnique :: Int -> Unique
+mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
+ mkBuiltinUnique :: Int -> Unique
mkBuiltinUnique i = mkUnique 'B' i
-mkPseudoUnique1 i = mkUnique 'C' i -- used for uniqueOf on Regs
-mkPseudoUnique2 i = mkUnique 'D' i -- ditto
-mkPseudoUnique3 i = mkUnique 'E' i -- ditto
+mkPseudoUnique1 i = mkUnique 'C' i -- used for getUnique on Regs
+mkPseudoUnique2 i = mkUnique 'D' i -- used in NCG for getUnique on RealRegs
+mkPseudoUnique3 i = mkUnique 'E' i -- used in NCG spiller to create spill VirtualRegs
+
+
getBuiltinUniques :: Int -> [Unique]
getBuiltinUniques n = map (mkUnique 'B') [1 .. n]
boundedClassKey = mkPreludeClassUnique 1
enumClassKey = mkPreludeClassUnique 2
eqClassKey = mkPreludeClassUnique 3
-evalClassKey = mkPreludeClassUnique 4
floatingClassKey = mkPreludeClassUnique 5
fractionalClassKey = mkPreludeClassUnique 6
integralClassKey = mkPreludeClassUnique 7
monadClassKey = mkPreludeClassUnique 8
-monadZeroClassKey = mkPreludeClassUnique 9
-monadPlusClassKey = mkPreludeClassUnique 10
-functorClassKey = mkPreludeClassUnique 11
-numClassKey = mkPreludeClassUnique 12
-ordClassKey = mkPreludeClassUnique 13
-readClassKey = mkPreludeClassUnique 14
-realClassKey = mkPreludeClassUnique 15
-realFloatClassKey = mkPreludeClassUnique 16
-realFracClassKey = mkPreludeClassUnique 17
-showClassKey = mkPreludeClassUnique 18
+monadPlusClassKey = 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
-cCallableClassKey = mkPreludeClassUnique 19
-cReturnableClassKey = mkPreludeClassUnique 20
+cCallableClassKey = mkPreludeClassUnique 18
+cReturnableClassKey = mkPreludeClassUnique 19
-ixClassKey = mkPreludeClassUnique 21
-allClassKey = mkPreludeClassUnique 22 -- Pseudo class used for universal quantification
+ixClassKey = mkPreludeClassUnique 20
\end{code}
%************************************************************************
funTyConKey = mkPreludeTyConUnique 13
intPrimTyConKey = mkPreludeTyConUnique 14
intTyConKey = mkPreludeTyConUnique 15
-integerTyConKey = mkPreludeTyConUnique 16
-liftTyConKey = mkPreludeTyConUnique 17
-listTyConKey = mkPreludeTyConUnique 18
-foreignObjPrimTyConKey = mkPreludeTyConUnique 19
-foreignObjTyConKey = mkPreludeTyConUnique 20
-mutableArrayPrimTyConKey = mkPreludeTyConUnique 21
-mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 22
-orderingTyConKey = mkPreludeTyConUnique 23
-synchVarPrimTyConKey = mkPreludeTyConUnique 24
-ratioTyConKey = mkPreludeTyConUnique 25
-rationalTyConKey = mkPreludeTyConUnique 26
-realWorldTyConKey = mkPreludeTyConUnique 27
-return2GMPsTyConKey = mkPreludeTyConUnique 28
-returnIntAndGMPTyConKey = mkPreludeTyConUnique 29
-stablePtrPrimTyConKey = mkPreludeTyConUnique 30
-stablePtrTyConKey = mkPreludeTyConUnique 31
-stateAndAddrPrimTyConKey = mkPreludeTyConUnique 32
-stateAndArrayPrimTyConKey = mkPreludeTyConUnique 33
-stateAndByteArrayPrimTyConKey = mkPreludeTyConUnique 34
-stateAndCharPrimTyConKey = mkPreludeTyConUnique 35
-stateAndDoublePrimTyConKey = mkPreludeTyConUnique 36
-stateAndFloatPrimTyConKey = mkPreludeTyConUnique 37
-stateAndIntPrimTyConKey = mkPreludeTyConUnique 38
-stateAndForeignObjPrimTyConKey = mkPreludeTyConUnique 39
-stateAndMutableArrayPrimTyConKey = mkPreludeTyConUnique 40
-stateAndMutableByteArrayPrimTyConKey = mkPreludeTyConUnique 41
-stateAndSynchVarPrimTyConKey = mkPreludeTyConUnique 42
-stateAndPtrPrimTyConKey = mkPreludeTyConUnique 43
-stateAndStablePtrPrimTyConKey = mkPreludeTyConUnique 44
-stateAndWordPrimTyConKey = mkPreludeTyConUnique 45
-statePrimTyConKey = mkPreludeTyConUnique 46
-stateTyConKey = mkPreludeTyConUnique 47
-mutableByteArrayTyConKey = mkPreludeTyConUnique 48
-stTyConKey = mkPreludeTyConUnique 49
-stRetTyConKey = mkPreludeTyConUnique 50
-ioTyConKey = mkPreludeTyConUnique 51
-ioResultTyConKey = mkPreludeTyConUnique 52
-byteArrayTyConKey = mkPreludeTyConUnique 53
-wordPrimTyConKey = mkPreludeTyConUnique 54
-wordTyConKey = mkPreludeTyConUnique 55
-voidTyConKey = mkPreludeTyConUnique 56
+int8TyConKey = mkPreludeTyConUnique 16
+int16TyConKey = mkPreludeTyConUnique 17
+int32TyConKey = mkPreludeTyConUnique 18
+int64PrimTyConKey = mkPreludeTyConUnique 19
+int64TyConKey = mkPreludeTyConUnique 20
+integerTyConKey = mkPreludeTyConUnique 21
+listTyConKey = mkPreludeTyConUnique 22
+foreignObjPrimTyConKey = mkPreludeTyConUnique 23
+foreignObjTyConKey = mkPreludeTyConUnique 24
+weakPrimTyConKey = mkPreludeTyConUnique 25
+mutableArrayPrimTyConKey = mkPreludeTyConUnique 26
+mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 27
+orderingTyConKey = mkPreludeTyConUnique 28
+mVarPrimTyConKey = mkPreludeTyConUnique 29
+ratioTyConKey = mkPreludeTyConUnique 30
+rationalTyConKey = mkPreludeTyConUnique 31
+realWorldTyConKey = mkPreludeTyConUnique 32
+stablePtrPrimTyConKey = mkPreludeTyConUnique 33
+stablePtrTyConKey = mkPreludeTyConUnique 34
+statePrimTyConKey = mkPreludeTyConUnique 35
+stableNamePrimTyConKey = mkPreludeTyConUnique 50
+stableNameTyConKey = mkPreludeTyConUnique 51
+mutableByteArrayTyConKey = mkPreludeTyConUnique 52
+mutVarPrimTyConKey = mkPreludeTyConUnique 53
+ioTyConKey = mkPreludeTyConUnique 55
+byteArrayTyConKey = mkPreludeTyConUnique 56
+wordPrimTyConKey = mkPreludeTyConUnique 57
+wordTyConKey = mkPreludeTyConUnique 58
+word8TyConKey = mkPreludeTyConUnique 59
+word16TyConKey = mkPreludeTyConUnique 60
+word32TyConKey = mkPreludeTyConUnique 61
+word64PrimTyConKey = mkPreludeTyConUnique 62
+word64TyConKey = mkPreludeTyConUnique 63
+boxedConKey = mkPreludeTyConUnique 64
+unboxedConKey = mkPreludeTyConUnique 65
+anyBoxConKey = mkPreludeTyConUnique 66
+kindConKey = mkPreludeTyConUnique 67
+boxityConKey = mkPreludeTyConUnique 68
+typeConKey = mkPreludeTyConUnique 69
+threadIdPrimTyConKey = mkPreludeTyConUnique 70
\end{code}
%************************************************************************
%************************************************************************
\begin{code}
-addrDataConKey = mkPreludeDataConUnique 1
-buildDataConKey = mkPreludeDataConUnique 2
-charDataConKey = mkPreludeDataConUnique 4
-consDataConKey = mkPreludeDataConUnique 5
-doubleDataConKey = mkPreludeDataConUnique 6
-eqDataConKey = mkPreludeDataConUnique 7
-falseDataConKey = mkPreludeDataConUnique 8
-floatDataConKey = mkPreludeDataConUnique 9
-gtDataConKey = mkPreludeDataConUnique 10
-intDataConKey = mkPreludeDataConUnique 11
-integerDataConKey = mkPreludeDataConUnique 12
-liftDataConKey = mkPreludeDataConUnique 13
-ltDataConKey = mkPreludeDataConUnique 14
-foreignObjDataConKey = mkPreludeDataConUnique 15
-nilDataConKey = mkPreludeDataConUnique 18
-ratioDataConKey = mkPreludeDataConUnique 21
-return2GMPsDataConKey = mkPreludeDataConUnique 22
-returnIntAndGMPDataConKey = mkPreludeDataConUnique 23
-stablePtrDataConKey = mkPreludeDataConUnique 24
-stateAndAddrPrimDataConKey = mkPreludeDataConUnique 25
-stateAndArrayPrimDataConKey = mkPreludeDataConUnique 26
-stateAndByteArrayPrimDataConKey = mkPreludeDataConUnique 27
-stateAndCharPrimDataConKey = mkPreludeDataConUnique 28
-stateAndDoublePrimDataConKey = mkPreludeDataConUnique 29
-stateAndFloatPrimDataConKey = mkPreludeDataConUnique 30
-stateAndIntPrimDataConKey = mkPreludeDataConUnique 31
-stateAndForeignObjPrimDataConKey = mkPreludeDataConUnique 32
-stateAndMutableArrayPrimDataConKey = mkPreludeDataConUnique 33
-stateAndMutableByteArrayPrimDataConKey = mkPreludeDataConUnique 34
-stateAndSynchVarPrimDataConKey = mkPreludeDataConUnique 35
-stateAndPtrPrimDataConKey = mkPreludeDataConUnique 36
-stateAndStablePtrPrimDataConKey = mkPreludeDataConUnique 37
-stateAndWordPrimDataConKey = mkPreludeDataConUnique 38
-stateDataConKey = mkPreludeDataConUnique 39
-trueDataConKey = mkPreludeDataConUnique 40
-wordDataConKey = mkPreludeDataConUnique 41
-stDataConKey = mkPreludeDataConUnique 42
-stRetDataConKey = mkPreludeDataConUnique 43
-ioDataConKey = mkPreludeDataConUnique 44
-ioOkDataConKey = mkPreludeDataConUnique 45
-ioFailDataConKey = mkPreludeDataConUnique 46
+addrDataConKey = mkPreludeDataConUnique 0
+charDataConKey = mkPreludeDataConUnique 1
+consDataConKey = mkPreludeDataConUnique 2
+doubleDataConKey = mkPreludeDataConUnique 3
+falseDataConKey = mkPreludeDataConUnique 4
+floatDataConKey = mkPreludeDataConUnique 5
+intDataConKey = mkPreludeDataConUnique 6
+smallIntegerDataConKey = mkPreludeDataConUnique 7
+largeIntegerDataConKey = mkPreludeDataConUnique 8
+foreignObjDataConKey = mkPreludeDataConUnique 9
+nilDataConKey = mkPreludeDataConUnique 10
+ratioDataConKey = mkPreludeDataConUnique 11
+stablePtrDataConKey = mkPreludeDataConUnique 12
+stableNameDataConKey = mkPreludeDataConUnique 13
+trueDataConKey = mkPreludeDataConUnique 14
+wordDataConKey = mkPreludeDataConUnique 15
+stDataConKey = mkPreludeDataConUnique 16
+ioDataConKey = mkPreludeDataConUnique 17
\end{code}
%************************************************************************
\begin{code}
absentErrorIdKey = mkPreludeMiscIdUnique 1
-andandIdKey = mkPreludeMiscIdUnique 2
-appendIdKey = mkPreludeMiscIdUnique 3
-augmentIdKey = mkPreludeMiscIdUnique 4
-buildIdKey = mkPreludeMiscIdUnique 5
-composeIdKey = mkPreludeMiscIdUnique 6
-errorIdKey = mkPreludeMiscIdUnique 7
-foldlIdKey = mkPreludeMiscIdUnique 8
-foldrIdKey = mkPreludeMiscIdUnique 9
-forkIdKey = mkPreludeMiscIdUnique 10
-integerMinusOneIdKey = mkPreludeMiscIdUnique 12
-integerPlusOneIdKey = mkPreludeMiscIdUnique 13
-integerPlusTwoIdKey = mkPreludeMiscIdUnique 14
-integerZeroIdKey = mkPreludeMiscIdUnique 15
-irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
-lexIdKey = mkPreludeMiscIdUnique 17
-noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 20
-nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 21
-notIdKey = mkPreludeMiscIdUnique 22
-packCStringIdKey = mkPreludeMiscIdUnique 23
-parErrorIdKey = mkPreludeMiscIdUnique 24
-parIdKey = mkPreludeMiscIdUnique 25
-patErrorIdKey = mkPreludeMiscIdUnique 26
-readParenIdKey = mkPreludeMiscIdUnique 27
-realWorldPrimIdKey = mkPreludeMiscIdUnique 28
-recConErrorIdKey = mkPreludeMiscIdUnique 29
-recUpdErrorIdKey = mkPreludeMiscIdUnique 30
-seqIdKey = mkPreludeMiscIdUnique 31
-showParenIdKey = mkPreludeMiscIdUnique 32
-showSpaceIdKey = mkPreludeMiscIdUnique 33
-showStringIdKey = mkPreludeMiscIdUnique 34
-traceIdKey = mkPreludeMiscIdUnique 35
-unpackCString2IdKey = mkPreludeMiscIdUnique 36
-unpackCStringAppendIdKey = mkPreludeMiscIdUnique 37
-unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 38
-unpackCStringIdKey = mkPreludeMiscIdUnique 39
-voidIdKey = mkPreludeMiscIdUnique 40
-ushowListIdKey = mkPreludeMiscIdUnique 41
-ureadListIdKey = mkPreludeMiscIdUnique 42
-
-copyableIdKey = mkPreludeMiscIdUnique 43
-noFollowIdKey = mkPreludeMiscIdUnique 44
-parAtAbsIdKey = mkPreludeMiscIdUnique 45
-parAtForNowIdKey = mkPreludeMiscIdUnique 46
-parAtIdKey = mkPreludeMiscIdUnique 47
-parAtRelIdKey = mkPreludeMiscIdUnique 48
-parGlobalIdKey = mkPreludeMiscIdUnique 49
-parLocalIdKey = mkPreludeMiscIdUnique 50
+appendIdKey = mkPreludeMiscIdUnique 2
+augmentIdKey = mkPreludeMiscIdUnique 3
+buildIdKey = mkPreludeMiscIdUnique 4
+errorIdKey = mkPreludeMiscIdUnique 5
+foldlIdKey = mkPreludeMiscIdUnique 6
+foldrIdKey = mkPreludeMiscIdUnique 7
+recSelErrIdKey = mkPreludeMiscIdUnique 8
+integerMinusOneIdKey = mkPreludeMiscIdUnique 9
+integerPlusOneIdKey = mkPreludeMiscIdUnique 10
+integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
+integerZeroIdKey = mkPreludeMiscIdUnique 12
+int2IntegerIdKey = mkPreludeMiscIdUnique 13
+addr2IntegerIdKey = mkPreludeMiscIdUnique 14
+irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
+lexIdKey = mkPreludeMiscIdUnique 16
+noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
+nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
+parErrorIdKey = mkPreludeMiscIdUnique 20
+parIdKey = mkPreludeMiscIdUnique 21
+patErrorIdKey = mkPreludeMiscIdUnique 22
+realWorldPrimIdKey = mkPreludeMiscIdUnique 23
+recConErrorIdKey = mkPreludeMiscIdUnique 24
+recUpdErrorIdKey = mkPreludeMiscIdUnique 25
+traceIdKey = mkPreludeMiscIdUnique 26
+unpackCString2IdKey = mkPreludeMiscIdUnique 27
+unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
+unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
+unpackCStringIdKey = mkPreludeMiscIdUnique 30
+ushowListIdKey = mkPreludeMiscIdUnique 31
+unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
+concatIdKey = mkPreludeMiscIdUnique 33
+filterIdKey = mkPreludeMiscIdUnique 34
+zipIdKey = mkPreludeMiscIdUnique 35
+bindIOIdKey = mkPreludeMiscIdUnique 36
+returnIOIdKey = mkPreludeMiscIdUnique 37
+deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
+makeStablePtrIdKey = mkPreludeMiscIdUnique 39
+getTagIdKey = mkPreludeMiscIdUnique 40
\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.
+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}
-fromIntClassOpKey = mkPreludeMiscIdUnique 51
-fromIntegerClassOpKey = mkPreludeMiscIdUnique 52
-minusClassOpKey = mkPreludeMiscIdUnique 53
-fromRationalClassOpKey = mkPreludeMiscIdUnique 54
-enumFromClassOpKey = mkPreludeMiscIdUnique 55
-enumFromThenClassOpKey = mkPreludeMiscIdUnique 56
-enumFromToClassOpKey = mkPreludeMiscIdUnique 57
-enumFromThenToClassOpKey= mkPreludeMiscIdUnique 58
-eqClassOpKey = mkPreludeMiscIdUnique 59
-geClassOpKey = mkPreludeMiscIdUnique 60
-zeroClassOpKey = mkPreludeMiscIdUnique 61
-thenMClassOpKey = mkPreludeMiscIdUnique 62 -- (>>=)
-unboundKey = mkPreludeMiscIdUnique 63 -- Just a place holder for unbound
- -- variables produced by the renamer
-fromEnumClassOpKey = mkPreludeMiscIdUnique 64
-
-mainKey = mkPreludeMiscIdUnique 65
-returnMClassOpKey = mkPreludeMiscIdUnique 66
-otherwiseIdKey = mkPreludeMiscIdUnique 67
-toEnumClassOpKey = mkPreludeMiscIdUnique 68
+fromIntClassOpKey = 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
+failMClassOpKey = mkPreludeMiscIdUnique 112
+thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
+ -- Just a place holder for unbound variables produced by the renamer:
+unboundKey = mkPreludeMiscIdUnique 114
+fromEnumClassOpKey = mkPreludeMiscIdUnique 115
+
+mainKey = mkPreludeMiscIdUnique 116
+returnMClassOpKey = mkPreludeMiscIdUnique 117
+otherwiseIdKey = mkPreludeMiscIdUnique 118
+toEnumClassOpKey = mkPreludeMiscIdUnique 119
+mapIdKey = mkPreludeMiscIdUnique 120
+\end{code}
+
+\begin{code}
+assertIdKey = mkPreludeMiscIdUnique 121
+runSTRepIdKey = mkPreludeMiscIdUnique 122
\end{code}