import UniqFM
import Unique ( Unique, Uniquable(..), hasKey,
mkPreludeMiscIdUnique, mkPreludeDataConUnique,
- mkPreludeTyConUnique, mkPreludeClassUnique
+ mkPreludeTyConUnique, mkPreludeClassUnique,
+ mkTupleTyConUnique
)
import BasicTypes ( Boxity(..), Arity )
import UniqFM ( UniqFM, listToUFM )
knownKeyNames
= [
-- Type constructors (synonyms especially)
- ioTyConName,
- mainName,
+ ioTyConName, ioDataConName,
+ runMainName,
orderingTyConName,
rationalTyConName,
ratioDataConName,
returnMName,
failMName,
fromRationalName,
-
+
+ -- not class methods, but overloaded (for parallel arrays)
+ enumFromToPName,
+ enumFromThenToPName,
+
deRefStablePtrName,
newStablePtrName,
bindIOName,
buildName,
augmentName,
+ -- Parallel array operations
+ nullPName,
+ lengthPName,
+ replicatePName,
+ mapPName,
+ filterPName,
+ zipPName,
+ crossPName,
+ indexPName,
+ toPName,
+ bpermutePName,
+ bpermuteDftPName,
+ indexOfPName,
+
-- FFI primitive types that are not wired-in.
int8TyConName,
int16TyConName,
eqStringName,
assertName,
runSTRepName,
- printName
+ printName,
+ splitName, fstName, sndName, -- Used by splittery
+
+ -- Others (needed for flattening and not mentioned before)
+ andName,
+ orName,
+ eqCharName,
+ eqIntName,
+ eqFloatName,
+ eqDoubleName,
+ neqCharName,
+ neqIntName,
+ neqFloatName,
+ neqDoubleName
]
\end{code}
pREL_READ_Name = mkModuleName "PrelRead"
pREL_NUM_Name = mkModuleName "PrelNum"
pREL_LIST_Name = mkModuleName "PrelList"
+pREL_PARR_Name = mkModuleName "PrelPArr"
pREL_TUP_Name = mkModuleName "PrelTup"
pREL_PACK_Name = mkModuleName "PrelPack"
pREL_CONC_Name = mkModuleName "PrelConc"
pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
pREL_FOREIGN_Name = mkModuleName "PrelForeign"
pREL_STABLE_Name = mkModuleName "PrelStable"
+pREL_SPLIT_Name = mkModuleName "PrelSplit"
pREL_ADDR_Name = mkModuleName "PrelAddr"
pREL_PTR_Name = mkModuleName "PrelPtr"
pREL_ERR_Name = mkModuleName "PrelErr"
pREL_REAL_Name = mkModuleName "PrelReal"
pREL_FLOAT_Name = mkModuleName "PrelFloat"
+pREL_TOP_HANDLER_Name = mkModuleName "PrelTopHandler"
-pREL_MAIN_Name = mkModuleName "PrelMain"
mAIN_Name = mkModuleName "Main"
pREL_INT_Name = mkModuleName "PrelInt"
pREL_WORD_Name = mkModuleName "PrelWord"
fOREIGNOBJ_Name = mkModuleName "ForeignObj"
aDDR_Name = mkModuleName "Addr"
+gLA_EXTS_Name = mkModuleName "GlaExts"
+
pREL_GHC = mkPrelModule pREL_GHC_Name
pREL_BASE = mkPrelModule pREL_BASE_Name
pREL_ADDR = mkPrelModule pREL_ADDR_Name
pREL_NUM = mkPrelModule pREL_NUM_Name
pREL_REAL = mkPrelModule pREL_REAL_Name
pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
+pRELUDE = mkPrelModule pRELUDE_Name
iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive")
\end{code}
and it's convenient to write them all down in one place.
\begin{code}
-mainName = varQual mAIN_Name SLIT("main") mainKey
+dollarMainName = varQual mAIN_Name SLIT("$main") dollarMainKey
+runMainName = varQual pREL_TOP_HANDLER_Name SLIT("runMain") runMainKey
-- Stuff from PrelGHC
usOnceTyConName = kindQual SLIT(".") usOnceTyConKey
nilDataConName = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
consDataConName = dataQual pREL_BASE_Name SLIT(":") consDataConKey
+-- PrelTup
+fstName = varQual pREL_TUP_Name SLIT("fst") fstIdKey
+sndName = varQual pREL_TUP_Name SLIT("snd") sndIdKey
+
-- Generics
crossTyConName = tcQual pREL_BASE_Name SLIT(":*:") crossTyConKey
crossDataConName = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
-- Random PrelBase functions
-unsafeCoerceName = varQual pREL_BASE_Name SLIT("unsafeCoerce") unsafeCoerceIdKey
+unsafeCoerceName = varQual pREL_BASE_Name SLIT("unsafeCoerce")
+ unsafeCoerceIdKey
otherwiseIdName = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
-appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
-foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
-mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
-buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
-augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
-eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
+appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
+foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
+mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
+buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
+augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
+eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
+andName = varQual pREL_BASE_Name SLIT("&&") andIdKey
+orName = varQual pREL_BASE_Name SLIT("||") orIdKey
+eqCharName = varQual pREL_GHC_Name SLIT("eqChar#") eqCharIdKey
+eqIntName = varQual pREL_GHC_Name SLIT("==#") eqIntIdKey
+eqFloatName = varQual pREL_GHC_Name SLIT("eqFloat#") eqFloatIdKey
+eqDoubleName = varQual pREL_GHC_Name SLIT("==##") eqDoubleIdKey
+neqCharName = varQual pREL_GHC_Name SLIT("neqChar#") neqCharIdKey
+neqIntName = varQual pREL_GHC_Name SLIT("/=#") neqIntIdKey
+neqFloatName = varQual pREL_GHC_Name SLIT("neqFloat#") neqFloatIdKey
+neqDoubleName = varQual pREL_GHC_Name SLIT("/=##") neqDoubleIdKey
-- Strings
unpackCStringName = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
enumFromThenName = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
+-- Overloaded via Class Enum
+enumFromToPName = varQual pREL_PARR_Name SLIT("enumFromToP") enumFromToPIdKey
+enumFromThenToPName= varQual pREL_PARR_Name SLIT("enumFromThenToP") enumFromThenToPIdKey
+
-- Class Bounded
boundedClassName = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
filterName = varQual pREL_LIST_Name SLIT("filter") filterIdKey
zipName = varQual pREL_LIST_Name SLIT("zip") zipIdKey
+-- parallel array types and functions
+parrTyConName = tcQual pREL_PARR_Name SLIT("[::]") parrTyConKey
+parrDataConName = dataQual pREL_PARR_Name SLIT("PArr") parrDataConKey
+nullPName = varQual pREL_PARR_Name SLIT("nullP") nullPIdKey
+lengthPName = varQual pREL_PARR_Name SLIT("lengthP") lengthPIdKey
+replicatePName = varQual pREL_PARR_Name SLIT("replicateP") replicatePIdKey
+mapPName = varQual pREL_PARR_Name SLIT("mapP") mapPIdKey
+filterPName = varQual pREL_PARR_Name SLIT("filterP") filterPIdKey
+zipPName = varQual pREL_PARR_Name SLIT("zipP") zipPIdKey
+crossPName = varQual pREL_PARR_Name SLIT("crossP") crossPIdKey
+indexPName = varQual pREL_PARR_Name SLIT("!:") indexPIdKey
+toPName = varQual pREL_PARR_Name SLIT("toP") toPIdKey
+bpermutePName = varQual pREL_PARR_Name SLIT("bpermuteP") bpermutePIdKey
+bpermuteDftPName = varQual pREL_PARR_Name SLIT("bpermuteDftP")
+ bpermuteDftPIdKey
+indexOfPName = varQual pREL_PARR_Name SLIT("indexOfP") indexOfPIdKey
+
-- IOBase things
ioTyConName = tcQual pREL_IO_BASE_Name SLIT("IO") ioTyConKey
ioDataConName = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
byteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("ByteArray") byteArrayTyConKey
mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("MutableByteArray") mutableByteArrayTyConKey
--- Forign objects and weak pointers
+-- Foreign objects and weak pointers
foreignObjTyConName = tcQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjTyConKey
foreignObjDataConName = dataQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjDataConKey
foreignPtrTyConName = tcQual pREL_FOREIGN_Name SLIT("ForeignPtr") foreignPtrTyConKey
assertName = varQual pREL_GHC_Name SLIT("assert") assertIdKey
getTagName = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
runSTRepName = varQual pREL_ST_Name SLIT("runSTRep") runSTRepIdKey
+
+-- The "split" Id for splittable implicit parameters
+splitName = varQual pREL_SPLIT_Name SLIT("split") splitIdKey
\end{code}
%************************************************************************
funTyCon_RDR = nameRdrName funTyConName
nilCon_RDR = nameRdrName nilDataConName
listTyCon_RDR = nameRdrName listTyConName
+parrTyCon_RDR = nameRdrName parrTyConName
ioTyCon_RDR = nameRdrName ioTyConName
intTyCon_RDR = nameRdrName intTyConName
eq_RDR = nameRdrName eqName
crossTyConKey = mkPreludeTyConUnique 79
plusTyConKey = mkPreludeTyConUnique 80
genUnitTyConKey = mkPreludeTyConUnique 81
+
+-- Parallel array type constructor
+parrTyConKey = mkPreludeTyConUnique 82
+
+unitTyConKey = mkTupleTyConUnique Boxed 0
\end{code}
%************************************************************************
inlDataConKey = mkPreludeDataConUnique 21
inrDataConKey = mkPreludeDataConUnique 22
genUnitDataConKey = mkPreludeDataConUnique 23
+
+-- Data constructor for parallel arrays
+parrDataConKey = mkPreludeDataConUnique 24
\end{code}
%************************************************************************
integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
integerZeroIdKey = mkPreludeMiscIdUnique 12
int2IntegerIdKey = mkPreludeMiscIdUnique 13
+seqIdKey = mkPreludeMiscIdUnique 14
irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
eqStringIdKey = mkPreludeMiscIdUnique 16
noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
timesIntegerIdKey = mkPreludeMiscIdUnique 42
printIdKey = mkPreludeMiscIdUnique 43
failIOIdKey = mkPreludeMiscIdUnique 44
+nullAddrIdKey = mkPreludeMiscIdUnique 46
+voidArgIdKey = mkPreludeMiscIdUnique 47
+splitIdKey = mkPreludeMiscIdUnique 48
+fstIdKey = mkPreludeMiscIdUnique 49
+sndIdKey = mkPreludeMiscIdUnique 50
+otherwiseIdKey = mkPreludeMiscIdUnique 51
+mapIdKey = mkPreludeMiscIdUnique 52
+assertIdKey = mkPreludeMiscIdUnique 53
+runSTRepIdKey = mkPreludeMiscIdUnique 54
+
+dollarMainKey = mkPreludeMiscIdUnique 55
+runMainKey = mkPreludeMiscIdUnique 56
+
+andIdKey = mkPreludeMiscIdUnique 57
+orIdKey = mkPreludeMiscIdUnique 58
+eqCharIdKey = mkPreludeMiscIdUnique 59
+eqIntIdKey = mkPreludeMiscIdUnique 60
+eqFloatIdKey = mkPreludeMiscIdUnique 61
+eqDoubleIdKey = mkPreludeMiscIdUnique 62
+neqCharIdKey = mkPreludeMiscIdUnique 63
+neqIntIdKey = mkPreludeMiscIdUnique 64
+neqFloatIdKey = mkPreludeMiscIdUnique 65
+neqDoubleIdKey = mkPreludeMiscIdUnique 66
+
+-- NB: Currently a gap of four slots
+
+-- Parallel array functions
+nullPIdKey = mkPreludeMiscIdUnique 70
+lengthPIdKey = mkPreludeMiscIdUnique 71
+replicatePIdKey = mkPreludeMiscIdUnique 72
+mapPIdKey = mkPreludeMiscIdUnique 73
+filterPIdKey = mkPreludeMiscIdUnique 74
+zipPIdKey = mkPreludeMiscIdUnique 75
+crossPIdKey = mkPreludeMiscIdUnique 76
+indexPIdKey = mkPreludeMiscIdUnique 77
+toPIdKey = mkPreludeMiscIdUnique 78
+enumFromToPIdKey = mkPreludeMiscIdUnique 79
+enumFromThenToPIdKey = mkPreludeMiscIdUnique 80
+bpermutePIdKey = mkPreludeMiscIdUnique 81
+bpermuteDftPIdKey = mkPreludeMiscIdUnique 82
+indexOfPIdKey = mkPreludeMiscIdUnique 83
\end{code}
Certain class operations from Prelude classes. They get their own
during type checking.
\begin{code}
+ -- Just a place holder for unbound variables produced by the renamer:
+unboundKey = mkPreludeMiscIdUnique 101
fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
minusClassOpKey = mkPreludeMiscIdUnique 103
fromRationalClassOpKey = mkPreludeMiscIdUnique 104
negateClassOpKey = mkPreludeMiscIdUnique 111
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}