#include "HsVersions.h"
import Module ( Module, mkModule )
-import OccName ( dataName, tcName, clsName, varName, mkOccFS
- )
-
+import OccName ( dataName, tcName, clsName, varName, mkOccNameFS,
+ mkVarOccFS )
import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
import Unique ( Unique, Uniquable(..), hasKey,
mkPreludeMiscIdUnique, mkPreludeDataConUnique,
This *local* name is used by the interactive stuff
\begin{code}
-itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
+itName uniq = mkInternalName uniq (mkOccNameFS varName FSLIT("it")) noSrcLoc
\end{code}
\begin{code}
basicKnownKeyNames :: [Name]
basicKnownKeyNames
= genericTyConNames
- ++ monadNames
++ typeableClassNames
++ [ -- Type constructors (synonyms especially)
ioTyConName, ioDataConName,
-- Monad stuff
thenIOName, bindIOName, returnIOName, failIOName,
+ failMName, bindMName, thenMName, returnMName,
-- MonadRec stuff
mfixName,
-- Splittable class
splittableClassName, splitName,
+ -- Other classes
+ randomClassName, randomGenClassName, monadPlusClassName,
+
-- Booleans
andName, orName
, marshalStringName, unmarshalStringName, checkDotnetResName
]
-monadNames :: [Name] -- The monad ops need by a HsDo
-monadNames = [returnMName, failMName, bindMName, thenMName]
-
genericTyConNames :: [Name]
genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
\end{code}
mAIN = mkModule "Main"
pREL_INT = mkModule "GHC.Int"
pREL_WORD = mkModule "GHC.Word"
+mONAD = mkModule "Control.Monad"
mONAD_FIX = mkModule "Control.Monad.Fix"
aRROW = mkModule "Control.Arrow"
aDDR = mkModule "Addr"
+rANDOM = mkModule "System.Random"
gLA_EXTS = mkModule "GHC.Exts"
rOOT_MAIN = mkModule ":Main" -- Root module for initialisation
- -- The ':xxx' makes a moudle name that the user can never
+ -- The ':xxx' makes a module name that the user can never
-- use himself. The z-encoding for ':' is "ZC", so the z-encoded
-- module name still starts with a capital letter, which keeps
-- the z-encoded version consistent.
iNTERACTIVE = mkModule ":Interactive"
+thFAKE = mkModule ":THFake"
\end{code}
%************************************************************************
range_RDR = varQual_RDR pREL_ARR FSLIT("range")
inRange_RDR = varQual_RDR pREL_ARR FSLIT("inRange")
index_RDR = varQual_RDR pREL_ARR FSLIT("index")
+unsafeIndex_RDR = varQual_RDR pREL_ARR FSLIT("unsafeIndex")
+unsafeRangeSize_RDR = varQual_RDR pREL_ARR FSLIT("unsafeRangeSize")
readList_RDR = varQual_RDR pREL_READ FSLIT("readList")
readListDefault_RDR = varQual_RDR pREL_READ FSLIT("readListDefault")
genUnitDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Unit")
----------------------
-varQual_RDR mod str = mkOrig mod (mkOccFS varName str)
-tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str)
-clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str)
-dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
+varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str)
+tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str)
+clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str)
+dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
\end{code}
%************************************************************************
\begin{code}
-rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
runMainIOName = varQual pREL_TOP_HANDLER FSLIT("runMainIO") runMainKey
orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey
-- Base classes (Eq, Ord, Functor)
-eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
-eqName = methName eqClassName FSLIT("==") eqClassOpKey
-ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
-geName = methName ordClassName FSLIT(">=") geClassOpKey
+eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
+eqName = methName eqClassName FSLIT("==") eqClassOpKey
+ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
+geName = methName ordClassName FSLIT(">=") geClassOpKey
functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey
-- Class Monad
-monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
-thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
-bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
+monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
+thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
+bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
returnMName = methName monadClassName FSLIT("return") returnMClassOpKey
-failMName = methName monadClassName FSLIT("fail") failMClassOpKey
+failMName = methName monadClassName FSLIT("fail") failMClassOpKey
-- Random PrelBase functions
otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey
buildName = varQual pREL_BASE FSLIT("build") buildIdKey
augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey
appendName = varQual pREL_BASE FSLIT("++") appendIdKey
-andName = varQual pREL_BASE FSLIT("&&") andIdKey
-orName = varQual pREL_BASE FSLIT("||") orIdKey
+andName = varQual pREL_BASE FSLIT("&&") andIdKey
+orName = varQual pREL_BASE FSLIT("||") orIdKey
assertName = varQual pREL_BASE FSLIT("assert") assertIdKey
-- PrelTup
mfixName = methName monadFixClassName FSLIT("mfix") mfixIdKey
-- Arrow notation
-arrAName = varQual aRROW FSLIT("arr") arrAIdKey
-composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
-firstAName = varQual aRROW FSLIT("first") firstAIdKey
-appAName = varQual aRROW FSLIT("app") appAIdKey
-choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
-loopAName = varQual aRROW FSLIT("loop") loopAIdKey
+arrAName = varQual aRROW FSLIT("arr") arrAIdKey
+composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
+firstAName = varQual aRROW FSLIT("first") firstAIdKey
+appAName = varQual aRROW FSLIT("app") appAIdKey
+choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
+loopAName = varQual aRROW FSLIT("loop") loopAIdKey
+
+-- Other classes, needed for type defaulting
+monadPlusClassName = clsQual mONAD FSLIT("MonadPlus") monadPlusClassKey
+randomClassName = clsQual rANDOM FSLIT("Random") randomClassKey
+randomGenClassName = clsQual rANDOM FSLIT("RandomGen") randomGenClassKey
-- dotnet interop
objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
clsQual = mk_known_key_name clsName
mk_known_key_name space mod str uniq
- = mkExternalName uniq mod (mkOccFS space str)
+ = mkExternalName uniq mod (mkOccNameFS space str)
Nothing noSrcLoc
conName :: Name -> FastString -> Unique -> Name
conName tycon occ uniq
- = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ)
+ = mkExternalName uniq (nameModule tycon) (mkOccNameFS dataName occ)
(Just tycon) noSrcLoc
methName :: Name -> FastString -> Unique -> Name
methName cls occ uniq
- = mkExternalName uniq (nameModule cls) (mkOccFS varName occ)
+ = mkExternalName uniq (nameModule cls) (mkVarOccFS occ)
(Just cls) noSrcLoc
\end{code}
monadFixClassKey = mkPreludeClassUnique 28
splittableClassKey = mkPreludeClassUnique 29
+
+monadPlusClassKey = mkPreludeClassUnique 30
+randomClassKey = mkPreludeClassUnique 31
+randomGenClassKey = mkPreludeClassUnique 32
\end{code}
%************************************************************************
[ readClassKey
]
+-- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
+-- and are: "classes defined in the Prelude or a standard library"
standardClassKeys = derivableClassKeys ++ numericClassKeys
-
-noDictClassKeys = [] -- ToDo: remove?
+ ++ [randomClassKey, randomGenClassKey,
+ functorClassKey,
+ monadClassKey, monadPlusClassKey]
\end{code}
@derivableClassKeys@ is also used in checking \tr{deriving} constructs