-First, for raw @PrimOps@ and their boxed versions:
-\begin{code}
-mkPrimOpIdUnique :: PrimOp -> Unique
-
-mkPrimOpIdUnique op = mkUnique '5' IBOX((tagOf_PrimOp op))
-\end{code}
-
-Now for other non-@DataCon@ @Ids@:
-\begin{code}
-absentErrorIdKey = mkPreludeMiscIdUnique 1
-buildIdKey = mkPreludeMiscIdUnique 2
-errorIdKey = mkPreludeMiscIdUnique 3
-foldlIdKey = mkPreludeMiscIdUnique 4
-foldrIdKey = mkPreludeMiscIdUnique 5
-forkIdKey = mkPreludeMiscIdUnique 6
-int2IntegerIdKey = mkPreludeMiscIdUnique 7
-integerMinusOneIdKey = mkPreludeMiscIdUnique 8
-integerPlusOneIdKey = mkPreludeMiscIdUnique 9
-integerZeroIdKey = mkPreludeMiscIdUnique 10
-integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
-packCStringIdKey = mkPreludeMiscIdUnique 12
-parIdKey = mkPreludeMiscIdUnique 13
-parErrorIdKey = mkPreludeMiscIdUnique 14
-patErrorIdKey = mkPreludeMiscIdUnique 15
---UNUSED:readParenIdKey = mkPreludeMiscIdUnique 16
-realWorldPrimIdKey = mkPreludeMiscIdUnique 17
-runSTIdKey = mkPreludeMiscIdUnique 18
-seqIdKey = mkPreludeMiscIdUnique 19
---UNUSED:showParenIdKey = mkPreludeMiscIdUnique 20
---UNUSED:showSpaceIdKey = mkPreludeMiscIdUnique 21
-traceIdKey = mkPreludeMiscIdUnique 22
-unpackCStringIdKey = mkPreludeMiscIdUnique 23
-unpackCString2IdKey = mkPreludeMiscIdUnique 20 -- NB: NB: NB
-unpackCStringAppendIdKey= mkPreludeMiscIdUnique 21 -- NB: NB: NB
-voidPrimIdKey = mkPreludeMiscIdUnique 24
-
-#ifdef GRAN
-parLocalIdKey = mkPreludeMiscIdUnique 25
-parGlobalIdKey = mkPreludeMiscIdUnique 26
-noFollowIdKey = mkPreludeMiscIdUnique 27
-copyableIdKey = mkPreludeMiscIdUnique 28
-#endif
-
-#ifdef DPH
-podSelectorIdKey = mkPreludeMiscIdUnique 29
-#endif {- Data Parallel Haskell -}
-\end{code}
-
-%************************************************************************
-%* *
-\subsection[UniqueSupply-type]{@UniqueSupply@ type and operations}
-%* *
-%************************************************************************
-
-\begin{code}
-#ifdef __GLASGOW_HASKELL__
-data UniqueSupply
- = MkUniqueSupply Int#
- | MkNewSupply SplitUniqSupply
-
-#else
-data UniqueSupply
- = MkUniqueSupply Word{-#STRICT#-}
- | MkNewSupply SplitUniqSupply
-#endif
-\end{code}
-
-@mkUniqueSupply@ is used to get a @UniqueSupply@ started.
-\begin{code}
-mkUniqueSupply :: Char -> UniqueSupply
-
-#ifdef __GLASGOW_HASKELL__
-
-mkUniqueSupply (MkChar c#)
- = MkUniqueSupply (w2i ((i2w (ord# c#)) `shiftL#` (i2w_s 24#)))
-
-#else
-
-mkUniqueSupply c
- = MkUniqueSupply ((fromInt (ord c)) `bitLsh` 24)
-
-#endif
-
-mkUniqueSupplyGrimily s = MkNewSupply s
-\end{code}
-
-The basic operation on a @UniqueSupply@ is to get a @Unique@ (or a
-few). It's just plain different when splittable vs.~not...
-\begin{code}
-getUnique :: UniqueSupply -> (UniqueSupply, Unique)
-
-getUnique (MkUniqueSupply n)
-#ifdef __GLASGOW_HASKELL__
- = (MkUniqueSupply (n +# 1#), MkUnique n)
-#else
- = (MkUniqueSupply (n + 1), MkUnique n)
-#endif
-getUnique (MkNewSupply s)
- = let
- (u, s1) = getSUniqueAndDepleted s
- in
- (MkNewSupply s1, u)
-
-getUniques :: Int -- how many you want
- -> UniqueSupply
- -> (UniqueSupply, [Unique])
-
-#ifdef __GLASGOW_HASKELL__
-getUniques i@(MkInt i#) (MkUniqueSupply n)
- = (MkUniqueSupply (n +# i#),
- [ case x of { MkInt x# ->
- MkUnique (n +# x#) } | x <- [0 .. i-1] ])
-#else
-getUniques i (MkUniqueSupply n)
- = (MkUniqueSupply (n + fromInt i), [ MkUnique (n + fromInt x) | x <- [0 .. i-1] ])
-#endif
-getUniques i (MkNewSupply s)
- = let
- (us, s1) = getSUniquesAndDepleted i s
- in
- (MkNewSupply s1, us)
-\end{code}
-
-[OLD-ish NOTE] Simon says: The last line is preferable over @(n+i,
-<mumble> [n .. (n+i-1)])@, because it is a little lazier. If n=bot
-you get ([bot, bot, bot], bot) back instead of (bot,bot). This is
-sometimes important for knot-tying.
-
-Alternatively, if you hate the inefficiency:
-\begin{pseudocode}
-(range 0, n+i) where range m | m=i = []
- range m = n+m : range (m+1)
-\end{pseudocode}
-
-%************************************************************************
-%* *
-\subsection[UniqueSupplies-compiler]{@UniqueSupplies@ specific to the compiler}
-%* *
-%************************************************************************
-
-Different parts of the compiler have their own @UniqueSupplies@, each
-identified by their ``tag letter:''
-\begin{verbatim}
- B builtin; for when the compiler conjures @Uniques@ out of
- thin air
- b a second builtin; we need two in mkWrapperUnfolding (False)
- r renamer
- t typechecker
- d desugarer
- p ``podizer'' (DPH only)
- s core-to-core simplifier
- S ``pod'' simplifier (DPH only)
- c core-to-stg
- T stg-to-stg simplifier
- f flattener (of abstract~C)
- L Assembly labels (for native-code generators)
- u Printing out unfoldings (so don't have constant renaming)
- P profiling (finalCCstg)
-
- v used in specialised TyVarUniques (see TyVar.lhs)
-
- 1-9 used for ``prelude Uniques'' (wired-in things; see below)
- 1 = classes
- 2 = tycons
- 3 = data cons
- 4 = tuple datacons
- 5 = unboxed-primop ids
- 6 = boxed-primop ids
- 7 = misc ids
-\end{verbatim}
-
-\begin{code}
-uniqSupply_r = mkUniqueSupply 'r'
-uniqSupply_t = mkUniqueSupply 't'
-uniqSupply_d = mkUniqueSupply 'd'
-uniqSupply_p = mkUniqueSupply 'p'
-uniqSupply_s = mkUniqueSupply 's'
-uniqSupply_S = mkUniqueSupply 'S'
-uniqSupply_c = mkUniqueSupply 'c'
-uniqSupply_T = mkUniqueSupply 'T'
-uniqSupply_f = mkUniqueSupply 'f'
-uniqSupply_L = mkUniqueSupply 'L'
-uniqSupply_u = mkUniqueSupply 'u'
-uniqSupply_P = mkUniqueSupply 'P'
-\end{code}
-
-The ``builtin UniqueSupplies'' are more magical. You don't use the
-supply, you ask for @Uniques@ directly from it. (They probably aren't
-unique, but you know that!)
-