3 @Uniques@ are used to distinguish entities in the compiler (@Ids@,
4 @Classes@, etc.) from each other. Thus, @Uniques@ are the basic
5 comparison key in the compiler.
7 If there is any single operation that needs to be fast, it is @Unique@
8 comparison. Unsurprisingly, there is quite a bit of huff-and-puff
11 Some of the other hair in this code is to be able to use a
12 ``splittable @UniqueSupply@'' if requested/possible (not standard
17 Unique, Uniquable(..),
18 u2i, -- hack: used in UniqFM
20 pprUnique, pprUnique10, showUnique,
22 mkUnique, -- Used in UniqSupply
23 mkUniqueGrimily, -- Used in UniqSupply only!
25 incrUnique, -- Used for renumbering
26 initTyVarUnique, mkTyVarUnique,
29 -- now all the built-in Uniques (and functions to make them)
30 -- [the Oh-So-Wonderful Haskell module system wins again...]
36 getBuiltinUniques, mkBuiltinUnique,
37 mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
39 absentErrorIdKey, -- alphabetical...
52 byteArrayPrimTyConKey,
66 enumFromThenClassOpKey,
67 enumFromThenToClassOpKey,
82 foreignObjPrimTyConKey,
88 fromIntegerClassOpKey,
89 fromRationalClassOpKey,
108 integerMinusOneIdKey,
114 irrefutPatErrorIdKey,
126 mutableArrayPrimTyConKey,
127 mutableByteArrayPrimTyConKey,
129 noMethodBindingErrorIdKey,
130 nonExhaustiveGuardsErrorIdKey,
153 return2GMPsDataConKey,
155 returnIntAndGMPDataConKey,
156 returnIntAndGMPTyConKey,
171 stablePtrPrimTyConKey,
173 stateAndAddrPrimDataConKey,
174 stateAndAddrPrimTyConKey,
175 stateAndArrayPrimDataConKey,
176 stateAndArrayPrimTyConKey,
177 stateAndByteArrayPrimDataConKey,
178 stateAndByteArrayPrimTyConKey,
179 stateAndCharPrimDataConKey,
180 stateAndCharPrimTyConKey,
181 stateAndDoublePrimDataConKey,
182 stateAndDoublePrimTyConKey,
183 stateAndFloatPrimDataConKey,
184 stateAndFloatPrimTyConKey,
185 stateAndForeignObjPrimDataConKey,
186 stateAndForeignObjPrimTyConKey,
187 stateAndIntPrimDataConKey,
188 stateAndIntPrimTyConKey,
189 stateAndInt64PrimDataConKey,
190 stateAndInt64PrimTyConKey,
191 stateAndMutableArrayPrimDataConKey,
192 stateAndMutableArrayPrimTyConKey,
193 stateAndMutableByteArrayPrimDataConKey,
194 stateAndMutableByteArrayPrimTyConKey,
195 stateAndPtrPrimDataConKey,
196 stateAndPtrPrimTyConKey,
197 stateAndStablePtrPrimDataConKey,
198 stateAndStablePtrPrimTyConKey,
199 stateAndSynchVarPrimDataConKey,
200 stateAndSynchVarPrimTyConKey,
201 stateAndWordPrimDataConKey,
202 stateAndWordPrimTyConKey,
203 stateAndWord64PrimDataConKey,
204 stateAndWord64PrimTyConKey,
210 synchVarPrimTyConKey,
216 unpackCStringAppendIdKey,
217 unpackCStringFoldrIdKey,
247 , mutableByteArrayTyConKey
251 #include "HsVersions.h"
253 import FastString ( uniqueOfFS )
256 import PrelBase ( Char(..), chr, ord )
262 %************************************************************************
264 \subsection[Unique-type]{@Unique@ type and operations}
266 %************************************************************************
268 The @Chars@ are ``tag letters'' that identify the @UniqueSupply@.
269 Fast comparison is everything on @Uniques@:
272 data Unique = MkUnique Int#
276 u2i :: Unique -> FAST_INT
280 Now come the functions which construct uniques from their pieces, and vice versa.
281 The stuff about unique *supplies* is handled further down this module.
284 mkUnique :: Char -> Int -> Unique -- Builds a unique from pieces
285 unpkUnique :: Unique -> (Char, Int) -- The reverse
287 mkUniqueGrimily :: Int# -> Unique -- A trap-door for UniqSupply
289 incrUnique :: Unique -> Unique
294 mkUniqueGrimily x = MkUnique x
296 incrUnique (MkUnique i) = MkUnique (i +# 1#)
298 -- pop the Char in the top 8 bits of the Unique(Supply)
300 -- No 64-bit bugs here, as long as we have at least 32 bits. --JSM
306 mkUnique (C# c) (I# i)
307 = MkUnique (w2i (((i2w (ord# c)) `shiftL#` (i2w_s 24#)) `or#` (i2w i)))
309 unpkUnique (MkUnique u)
311 tag = C# (chr# (w2i ((i2w u) `shiftr` (i2w_s 24#))))
312 i = I# (w2i ((i2w u) `and#` (i2w 16777215#){-``0x00ffffff''-}))
316 shiftr x y = shiftRL# x y
321 %************************************************************************
323 \subsection[Uniquable-class]{The @Uniquable@ class}
325 %************************************************************************
328 class Uniquable a where
329 uniqueOf :: a -> Unique
331 instance Uniquable FastString where
332 uniqueOf fs = mkUniqueGrimily (uniqueOfFS fs)
334 instance Uniquable Int where
335 uniqueOf (I# i#) = mkUniqueGrimily i#
339 %************************************************************************
341 \subsection[Unique-instances]{Instance declarations for @Unique@}
343 %************************************************************************
345 And the whole point (besides uniqueness) is fast equality. We don't
346 use `deriving' because we want {\em precise} control of ordering
347 (equality on @Uniques@ is v common).
350 eqUnique (MkUnique u1) (MkUnique u2) = u1 ==# u2
351 ltUnique (MkUnique u1) (MkUnique u2) = u1 <# u2
352 leUnique (MkUnique u1) (MkUnique u2) = u1 <=# u2
354 cmpUnique (MkUnique u1) (MkUnique u2)
355 = if u1 ==# u2 then EQ else if u1 <# u2 then LT else GT
357 instance Eq Unique where
358 a == b = eqUnique a b
359 a /= b = not (eqUnique a b)
361 instance Ord Unique where
363 a <= b = leUnique a b
364 a > b = not (leUnique a b)
365 a >= b = not (ltUnique a b)
366 compare a b = cmpUnique a b
369 instance Uniquable Unique where
373 We do sometimes make strings with @Uniques@ in them:
375 pprUnique, pprUnique10 :: Unique -> SDoc
378 = case unpkUnique uniq of
379 (tag, u) -> finish_ppr tag u (iToBase62 u)
381 pprUnique10 uniq -- in base-10, dudes
382 = case unpkUnique uniq of
383 (tag, u) -> finish_ppr tag u (int u)
385 finish_ppr 't' u pp_u | u < 26
386 = -- Special case to make v common tyvars, t1, t2, ...
387 -- come out as a, b, ... (shorter, easier to read)
388 char (chr (ord 'a' + u))
389 finish_ppr tag u pp_u = char tag <> pp_u
391 showUnique :: Unique -> String
392 showUnique uniq = showSDoc (pprUnique uniq)
394 instance Outputable Unique where
397 instance Text Unique where
398 showsPrec p uniq rest = showUnique uniq
401 %************************************************************************
403 \subsection[Utils-base62]{Base-62 numbers}
405 %************************************************************************
407 A character-stingy way to read/write numbers (notably Uniques).
408 The ``62-its'' are \tr{[0-9a-zA-Z]}. We don't handle negative Ints.
409 Code stolen from Lennart.
411 # define BYTE_ARRAY GlaExts.ByteArray
412 # define RUN_ST ST.runST
413 # define AND_THEN >>=
414 # define AND_THEN_ >>
415 # define RETURN return
417 iToBase62 :: Int -> SDoc
422 bytes = case chars62 of { BYTE_ARRAY bounds_who_needs_'em bytes -> bytes }
425 case (indexCharArray# bytes n#) of { c ->
428 case (quotRem n 62) of { (q, I# r#) ->
429 case (indexCharArray# bytes r#) of { c ->
430 (<>) (iToBase62 q) (char (C# c)) }}
432 -- keep this at top level! (bug on 94/10/24 WDP)
433 chars62 :: BYTE_ARRAY Int
436 newCharArray (0, 61) AND_THEN \ ch_array ->
437 fill_in ch_array 0 62 "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
439 unsafeFreezeByteArray ch_array
442 fill_in ch_array i lim str
446 = writeCharArray ch_array i (str !! i) AND_THEN_
447 fill_in ch_array (i+1) lim str
450 %************************************************************************
452 \subsection[Uniques-prelude]{@Uniques@ for wired-in Prelude things}
454 %************************************************************************
456 Allocation of unique supply characters:
457 v,t,u : for renumbering value-, type- and usage- vars.
458 other a-z: lower case chars for unique supplies (see Main.lhs)
460 C-E: pseudo uniques (used in native-code generator)
461 _: unifiable tyvars (above)
462 1-8: prelude things below
465 mkAlphaTyVarUnique i = mkUnique '1' i
467 mkPreludeClassUnique i = mkUnique '2' i
468 mkPreludeTyConUnique i = mkUnique '3' i
469 mkTupleTyConUnique a = mkUnique '4' a
471 mkPreludeDataConUnique i = mkUnique '5' i -- must be alphabetic
472 mkTupleDataConUnique a = mkUnique '6' a -- ditto (*may* be used in C labels)
474 mkPrimOpIdUnique op = mkUnique '7' op
475 mkPreludeMiscIdUnique i = mkUnique '8' i
477 -- The "tyvar uniques" print specially nicely: a, b, c, etc.
478 -- See pprUnique for details
480 initTyVarUnique :: Unique
481 initTyVarUnique = mkUnique 't' 0
483 mkTyVarUnique :: Int -> Unique
484 mkTyVarUnique n = mkUnique 't' n
486 initTidyUniques :: (Unique, Unique) -- Global and local
487 initTidyUniques = (mkUnique 'g' 0, mkUnique 'x' 0)
489 mkPseudoUnique1, mkPseudoUnique2, mkPseudoUnique3,
490 mkBuiltinUnique :: Int -> Unique
492 mkBuiltinUnique i = mkUnique 'B' i
493 mkPseudoUnique1 i = mkUnique 'C' i -- used for uniqueOf on Regs
494 mkPseudoUnique2 i = mkUnique 'D' i -- ditto
495 mkPseudoUnique3 i = mkUnique 'E' i -- ditto
497 getBuiltinUniques :: Int -> [Unique]
498 getBuiltinUniques n = map (mkUnique 'B') [1 .. n]
501 %************************************************************************
503 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
505 %************************************************************************
508 boundedClassKey = mkPreludeClassUnique 1
509 enumClassKey = mkPreludeClassUnique 2
510 eqClassKey = mkPreludeClassUnique 3
511 evalClassKey = mkPreludeClassUnique 4
512 floatingClassKey = mkPreludeClassUnique 5
513 fractionalClassKey = mkPreludeClassUnique 6
514 integralClassKey = mkPreludeClassUnique 7
515 monadClassKey = mkPreludeClassUnique 8
516 monadZeroClassKey = mkPreludeClassUnique 9
517 monadPlusClassKey = mkPreludeClassUnique 10
518 functorClassKey = mkPreludeClassUnique 11
519 numClassKey = mkPreludeClassUnique 12
520 ordClassKey = mkPreludeClassUnique 13
521 readClassKey = mkPreludeClassUnique 14
522 realClassKey = mkPreludeClassUnique 15
523 realFloatClassKey = mkPreludeClassUnique 16
524 realFracClassKey = mkPreludeClassUnique 17
525 showClassKey = mkPreludeClassUnique 18
527 cCallableClassKey = mkPreludeClassUnique 19
528 cReturnableClassKey = mkPreludeClassUnique 20
530 ixClassKey = mkPreludeClassUnique 21
531 allClassKey = mkPreludeClassUnique 22 -- Pseudo class used for universal quantification
534 %************************************************************************
536 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
538 %************************************************************************
541 addrPrimTyConKey = mkPreludeTyConUnique 1
542 addrTyConKey = mkPreludeTyConUnique 2
543 arrayPrimTyConKey = mkPreludeTyConUnique 3
544 boolTyConKey = mkPreludeTyConUnique 4
545 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
546 charPrimTyConKey = mkPreludeTyConUnique 7
547 charTyConKey = mkPreludeTyConUnique 8
548 doublePrimTyConKey = mkPreludeTyConUnique 9
549 doubleTyConKey = mkPreludeTyConUnique 10
550 floatPrimTyConKey = mkPreludeTyConUnique 11
551 floatTyConKey = mkPreludeTyConUnique 12
552 funTyConKey = mkPreludeTyConUnique 13
553 intPrimTyConKey = mkPreludeTyConUnique 14
554 intTyConKey = mkPreludeTyConUnique 15
555 int8TyConKey = mkPreludeTyConUnique 16
556 int16TyConKey = mkPreludeTyConUnique 17
557 int32TyConKey = mkPreludeTyConUnique 18
558 int64PrimTyConKey = mkPreludeTyConUnique 19
559 int64TyConKey = mkPreludeTyConUnique 20
560 integerTyConKey = mkPreludeTyConUnique 21
561 liftTyConKey = mkPreludeTyConUnique 22
562 listTyConKey = mkPreludeTyConUnique 23
563 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
564 foreignObjTyConKey = mkPreludeTyConUnique 25
565 mutableArrayPrimTyConKey = mkPreludeTyConUnique 26
566 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 27
567 orderingTyConKey = mkPreludeTyConUnique 28
568 synchVarPrimTyConKey = mkPreludeTyConUnique 29
569 ratioTyConKey = mkPreludeTyConUnique 30
570 rationalTyConKey = mkPreludeTyConUnique 31
571 realWorldTyConKey = mkPreludeTyConUnique 32
572 return2GMPsTyConKey = mkPreludeTyConUnique 33
573 returnIntAndGMPTyConKey = mkPreludeTyConUnique 34
574 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
575 stablePtrTyConKey = mkPreludeTyConUnique 36
576 stateAndAddrPrimTyConKey = mkPreludeTyConUnique 37
577 stateAndArrayPrimTyConKey = mkPreludeTyConUnique 38
578 stateAndByteArrayPrimTyConKey = mkPreludeTyConUnique 39
579 stateAndCharPrimTyConKey = mkPreludeTyConUnique 40
580 stateAndDoublePrimTyConKey = mkPreludeTyConUnique 41
581 stateAndFloatPrimTyConKey = mkPreludeTyConUnique 42
582 stateAndIntPrimTyConKey = mkPreludeTyConUnique 43
583 stateAndInt64PrimTyConKey = mkPreludeTyConUnique 44
584 stateAndForeignObjPrimTyConKey = mkPreludeTyConUnique 45
585 stateAndMutableArrayPrimTyConKey = mkPreludeTyConUnique 46
586 stateAndMutableByteArrayPrimTyConKey = mkPreludeTyConUnique 47
587 stateAndSynchVarPrimTyConKey = mkPreludeTyConUnique 48
588 stateAndPtrPrimTyConKey = mkPreludeTyConUnique 49
589 stateAndStablePtrPrimTyConKey = mkPreludeTyConUnique 50
590 stateAndWordPrimTyConKey = mkPreludeTyConUnique 51
591 stateAndWord64PrimTyConKey = mkPreludeTyConUnique 52
592 statePrimTyConKey = mkPreludeTyConUnique 53
593 stateTyConKey = mkPreludeTyConUnique 54
594 mutableByteArrayTyConKey = mkPreludeTyConUnique 55
595 stTyConKey = mkPreludeTyConUnique 56
596 stRetTyConKey = mkPreludeTyConUnique 57
597 ioTyConKey = mkPreludeTyConUnique 58
598 ioResultTyConKey = mkPreludeTyConUnique 59
599 byteArrayTyConKey = mkPreludeTyConUnique 60
600 wordPrimTyConKey = mkPreludeTyConUnique 61
601 wordTyConKey = mkPreludeTyConUnique 62
602 word8TyConKey = mkPreludeTyConUnique 63
603 word16TyConKey = mkPreludeTyConUnique 64
604 word32TyConKey = mkPreludeTyConUnique 65
605 word64PrimTyConKey = mkPreludeTyConUnique 66
606 word64TyConKey = mkPreludeTyConUnique 67
607 voidTyConKey = mkPreludeTyConUnique 68
610 %************************************************************************
612 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
614 %************************************************************************
617 addrDataConKey = mkPreludeDataConUnique 1
618 buildDataConKey = mkPreludeDataConUnique 2
619 charDataConKey = mkPreludeDataConUnique 4
620 consDataConKey = mkPreludeDataConUnique 5
621 doubleDataConKey = mkPreludeDataConUnique 6
622 eqDataConKey = mkPreludeDataConUnique 7
623 falseDataConKey = mkPreludeDataConUnique 8
624 floatDataConKey = mkPreludeDataConUnique 9
625 gtDataConKey = mkPreludeDataConUnique 10
626 intDataConKey = mkPreludeDataConUnique 11
627 int8DataConKey = mkPreludeDataConUnique 12
628 int16DataConKey = mkPreludeDataConUnique 13
629 int32DataConKey = mkPreludeDataConUnique 14
630 int64DataConKey = mkPreludeDataConUnique 15
631 integerDataConKey = mkPreludeDataConUnique 16
632 liftDataConKey = mkPreludeDataConUnique 17
633 ltDataConKey = mkPreludeDataConUnique 18
634 foreignObjDataConKey = mkPreludeDataConUnique 19
635 nilDataConKey = mkPreludeDataConUnique 20
636 ratioDataConKey = mkPreludeDataConUnique 21
637 return2GMPsDataConKey = mkPreludeDataConUnique 22
638 returnIntAndGMPDataConKey = mkPreludeDataConUnique 23
639 stablePtrDataConKey = mkPreludeDataConUnique 24
640 stateAndAddrPrimDataConKey = mkPreludeDataConUnique 25
641 stateAndArrayPrimDataConKey = mkPreludeDataConUnique 26
642 stateAndByteArrayPrimDataConKey = mkPreludeDataConUnique 27
643 stateAndCharPrimDataConKey = mkPreludeDataConUnique 28
644 stateAndDoublePrimDataConKey = mkPreludeDataConUnique 29
645 stateAndFloatPrimDataConKey = mkPreludeDataConUnique 30
646 stateAndIntPrimDataConKey = mkPreludeDataConUnique 31
647 stateAndInt64PrimDataConKey = mkPreludeDataConUnique 32
648 stateAndForeignObjPrimDataConKey = mkPreludeDataConUnique 33
649 stateAndMutableArrayPrimDataConKey = mkPreludeDataConUnique 34
650 stateAndMutableByteArrayPrimDataConKey = mkPreludeDataConUnique 35
651 stateAndSynchVarPrimDataConKey = mkPreludeDataConUnique 36
652 stateAndPtrPrimDataConKey = mkPreludeDataConUnique 37
653 stateAndStablePtrPrimDataConKey = mkPreludeDataConUnique 38
654 stateAndWordPrimDataConKey = mkPreludeDataConUnique 39
655 stateAndWord64PrimDataConKey = mkPreludeDataConUnique 40
656 stateDataConKey = mkPreludeDataConUnique 41
657 trueDataConKey = mkPreludeDataConUnique 42
658 wordDataConKey = mkPreludeDataConUnique 43
659 word8DataConKey = mkPreludeDataConUnique 44
660 word16DataConKey = mkPreludeDataConUnique 45
661 word32DataConKey = mkPreludeDataConUnique 46
662 word64DataConKey = mkPreludeDataConUnique 47
663 stDataConKey = mkPreludeDataConUnique 48
664 stRetDataConKey = mkPreludeDataConUnique 49
665 ioDataConKey = mkPreludeDataConUnique 50
666 ioOkDataConKey = mkPreludeDataConUnique 51
667 ioFailDataConKey = mkPreludeDataConUnique 52
670 %************************************************************************
672 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
674 %************************************************************************
677 absentErrorIdKey = mkPreludeMiscIdUnique 1
678 andandIdKey = mkPreludeMiscIdUnique 2
679 appendIdKey = mkPreludeMiscIdUnique 3
680 augmentIdKey = mkPreludeMiscIdUnique 4
681 buildIdKey = mkPreludeMiscIdUnique 5
682 composeIdKey = mkPreludeMiscIdUnique 6
683 errorIdKey = mkPreludeMiscIdUnique 7
684 foldlIdKey = mkPreludeMiscIdUnique 8
685 foldrIdKey = mkPreludeMiscIdUnique 9
686 forkIdKey = mkPreludeMiscIdUnique 10
687 recSelErrIdKey = mkPreludeMiscIdUnique 11
688 integerMinusOneIdKey = mkPreludeMiscIdUnique 12
689 integerPlusOneIdKey = mkPreludeMiscIdUnique 13
690 integerPlusTwoIdKey = mkPreludeMiscIdUnique 14
691 integerZeroIdKey = mkPreludeMiscIdUnique 15
692 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
693 lexIdKey = mkPreludeMiscIdUnique 17
694 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 20
695 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 21
696 notIdKey = mkPreludeMiscIdUnique 22
697 packCStringIdKey = mkPreludeMiscIdUnique 23
698 parErrorIdKey = mkPreludeMiscIdUnique 24
699 parIdKey = mkPreludeMiscIdUnique 25
700 patErrorIdKey = mkPreludeMiscIdUnique 26
701 readParenIdKey = mkPreludeMiscIdUnique 27
702 realWorldPrimIdKey = mkPreludeMiscIdUnique 28
703 recConErrorIdKey = mkPreludeMiscIdUnique 29
704 recUpdErrorIdKey = mkPreludeMiscIdUnique 30
705 seqIdKey = mkPreludeMiscIdUnique 31
706 showParenIdKey = mkPreludeMiscIdUnique 32
707 showSpaceIdKey = mkPreludeMiscIdUnique 33
708 showStringIdKey = mkPreludeMiscIdUnique 34
709 traceIdKey = mkPreludeMiscIdUnique 35
710 unpackCString2IdKey = mkPreludeMiscIdUnique 36
711 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 37
712 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 38
713 unpackCStringIdKey = mkPreludeMiscIdUnique 39
714 unsafeCoerceIdKey = mkPreludeMiscIdUnique 40
715 voidIdKey = mkPreludeMiscIdUnique 41
716 ushowListIdKey = mkPreludeMiscIdUnique 42
717 ureadListIdKey = mkPreludeMiscIdUnique 43
719 copyableIdKey = mkPreludeMiscIdUnique 44
720 noFollowIdKey = mkPreludeMiscIdUnique 45
721 parAtAbsIdKey = mkPreludeMiscIdUnique 46
722 parAtForNowIdKey = mkPreludeMiscIdUnique 47
723 parAtIdKey = mkPreludeMiscIdUnique 48
724 parAtRelIdKey = mkPreludeMiscIdUnique 49
725 parGlobalIdKey = mkPreludeMiscIdUnique 50
726 parLocalIdKey = mkPreludeMiscIdUnique 51
729 Certain class operations from Prelude classes. They get
730 their own uniques so we can look them up easily when we want
731 to conjure them up during type checking.
733 fromIntClassOpKey = mkPreludeMiscIdUnique 52
734 fromIntegerClassOpKey = mkPreludeMiscIdUnique 53
735 minusClassOpKey = mkPreludeMiscIdUnique 54
736 fromRationalClassOpKey = mkPreludeMiscIdUnique 55
737 enumFromClassOpKey = mkPreludeMiscIdUnique 56
738 enumFromThenClassOpKey = mkPreludeMiscIdUnique 57
739 enumFromToClassOpKey = mkPreludeMiscIdUnique 58
740 enumFromThenToClassOpKey= mkPreludeMiscIdUnique 59
741 eqClassOpKey = mkPreludeMiscIdUnique 50
742 geClassOpKey = mkPreludeMiscIdUnique 61
743 zeroClassOpKey = mkPreludeMiscIdUnique 62
744 thenMClassOpKey = mkPreludeMiscIdUnique 63 -- (>>=)
745 unboundKey = mkPreludeMiscIdUnique 64 -- Just a place holder for unbound
746 -- variables produced by the renamer
747 fromEnumClassOpKey = mkPreludeMiscIdUnique 65
749 mainKey = mkPreludeMiscIdUnique 66
750 returnMClassOpKey = mkPreludeMiscIdUnique 67
751 otherwiseIdKey = mkPreludeMiscIdUnique 68
752 toEnumClassOpKey = mkPreludeMiscIdUnique 69
756 inlineIdKey = mkPreludeMiscIdUnique 70
757 coerceIdKey = mkPreludeMiscIdUnique 71
758 assertIdKey = mkPreludeMiscIdUnique 72