[project @ 2006-01-06 16:30:17 by simonmar]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
index 78104f1..eb26d34 100644 (file)
@@ -50,9 +50,8 @@ module PrelNames (
 #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,
@@ -75,7 +74,7 @@ import FastString
 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}
@@ -196,6 +195,9 @@ basicKnownKeyNames
        -- Splittable class
        splittableClassName, splitName,
 
+       -- Other classes
+       randomClassName, randomGenClassName, monadPlusClassName,
+
        -- Booleans
        andName, orName
        
@@ -257,18 +259,21 @@ lEX               = mkModule "Text.Read.Lex"
 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}
 
 %************************************************************************
@@ -409,10 +414,10 @@ inrDataCon_RDR     = dataQual_RDR pREL_BASE FSLIT("Inr")
 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}
 
 %************************************************************************
@@ -430,7 +435,6 @@ and it's convenient to write them all down in one place.
 
 
 \begin{code}
-rootMainName  = varQual rOOT_MAIN FSLIT("main") rootMainKey
 runMainIOName = varQual pREL_TOP_HANDLER FSLIT("runMainIO") runMainKey
 
 orderingTyConName = tcQual   pREL_BASE FSLIT("Ordering") orderingTyConKey
@@ -614,12 +618,17 @@ monadFixClassName  = clsQual mONAD_FIX FSLIT("MonadFix") monadFixClassKey
 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
@@ -646,17 +655,17 @@ tcQual   = mk_known_key_name tcName
 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}
 
@@ -697,6 +706,10 @@ typeable7ClassKey  = mkPreludeClassUnique 27
 
 monadFixClassKey       = mkPreludeClassUnique 28
 splittableClassKey     = mkPreludeClassUnique 29
+
+monadPlusClassKey      = mkPreludeClassUnique 30
+randomClassKey         = mkPreludeClassUnique 31
+randomGenClassKey      = mkPreludeClassUnique 32
 \end{code}
 
 %************************************************************************
@@ -1021,7 +1034,12 @@ needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
        [ 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
+                 ++ [randomClassKey, randomGenClassKey,
+                     functorClassKey, 
+                     monadClassKey, monadPlusClassKey]
 
 noDictClassKeys = [] -- ToDo: remove?
 \end{code}