[project @ 2001-06-28 14:41:19 by simonmar]
[ghc-hetmet.git] / ghc / compiler / basicTypes / Module.lhs
index 5c2b423..9b43ed7 100644 (file)
@@ -21,26 +21,31 @@ in a different DLL, by setting the DLL flag.
 \begin{code}
 module Module 
     (
-      Module, moduleName
-                           -- abstract, instance of Eq, Ord, Outputable
+      Module,                  -- Abstract, instance of Eq, Ord, Outputable
+
+    , PackageName              -- = FastString; instance of Outputable, Uniquable
+    , modulePackage            -- :: Module -> PackageName
+    , preludePackage           -- :: PackageName       name of Standard Prelude package
+
     , ModuleName
-    , isModuleInThisPackage, mkModuleInThisPackage,
+    , pprModuleName            -- :: ModuleName -> SDoc
     , printModulePrefix
 
+    , moduleName               -- :: Module -> ModuleName 
     , moduleNameString         -- :: ModuleName -> EncodedString
     , moduleNameUserString     -- :: ModuleName -> UserString
     , moduleNameFS             -- :: ModuleName -> EncodedFS
 
     , moduleString             -- :: Module -> EncodedString
     , moduleUserString         -- :: Module -> UserString
-    , moduleName               -- :: Module -> ModuleName
 
     , mkVanillaModule          -- :: ModuleName -> Module
+    , isVanillaModule          -- :: Module -> Bool
     , mkPrelModule             -- :: UserString -> Module
+    , isPrelModule             -- :: Module -> Bool
     , mkModule                 -- :: ModuleName -> PackageName -> Module
     , mkHomeModule             -- :: ModuleName -> Module
-
---    , mkSrcModule
+    , isHomeModule             -- :: Module -> Bool
 
     , mkModuleName             -- :: UserString -> ModuleName
     , mkModuleNameFS           -- :: UserFS    -> ModuleName
@@ -48,8 +53,6 @@ module Module
 
     , pprModule,
  
-    , PackageName
-
        -- Where to find a .hi file
     , WhereFrom(..)
 
@@ -68,8 +71,8 @@ module Module
 import OccName
 import Outputable
 import CmdLineOpts     ( opt_InPackage )
-import FastString      ( FastString, uniqueOfFS )
-import Unique          ( Uniquable(..), mkUniqueGrimily )
+import FastString      ( FastString )
+import Unique          ( Uniquable(..) )
 import UniqFM
 import UniqSet
 \end{code}
@@ -97,7 +100,7 @@ renamer href here.)
 \begin{code}
 data Module = Module ModuleName PackageInfo
 
-data PackageInfo 
+data PackageInfo
   = ThisPackage                                -- A module from the same package 
                                        -- as the one being compiled
   | AnotherPackage PackageName         -- A module from a different package
@@ -106,18 +109,21 @@ data PackageInfo
                -- Main case: we've come across Foo.x in an interface file
                -- but we havn't yet opened Foo.hi.  We need a Name for Foo.x
                -- Later on (in RnEnv.newTopBinder) we'll update the cache
-               -- to have the right PackageInfo
+               -- to have the right PackageName
 
 type PackageName = FastString          -- No encoding at all
 
 preludePackage :: PackageName
 preludePackage = SLIT("std")
 
+packageInfoPackage :: PackageInfo -> PackageName
+packageInfoPackage ThisPackage        = opt_InPackage
+packageInfoPackage DunnoYet          = SLIT("<?>")
+packageInfoPackage (AnotherPackage p) = p
+
 instance Outputable PackageInfo where
        -- Just used in debug prints of lex tokens and in debug modde
-   ppr ThisPackage        = ptext SLIT("<THIS>")
-   ppr DunnoYet                  = ptext SLIT("<?>")
-   ppr (AnotherPackage p) = ptext p
+   ppr pkg_info = ppr (packageInfoPackage pkg_info)
 \end{code}
 
 
@@ -135,6 +141,9 @@ data WhereFrom = ImportByUser               -- Ordinary user import: look for M.hi
               | ImportBySystem         -- Non user import.  Look for M.hi if M is in
                                        -- the module this module depends on, or is a system-ish module; 
                                        -- M.hi-boot otherwise
+              | ImportByCmdLine        -- The user typed a qualified name at
+                                       -- the GHCi prompt, try to demand-load
+                                       -- the interface.
 
 instance Outputable WhereFrom where
   ppr ImportByUser       = empty
@@ -155,7 +164,7 @@ newtype ModuleName = ModuleName EncodedFS
        -- so the module names have the z-encoding applied to them
 
 instance Uniquable ModuleName where
-  getUnique (ModuleName nm) = mkUniqueGrimily (uniqueOfFS nm)
+  getUnique (ModuleName nm) = getUnique nm
 
 instance Eq ModuleName where
   nm1 == nm2 = getUnique nm1 == getUnique nm2
@@ -193,10 +202,6 @@ mkModuleNameFS s = ModuleName (encodeFS s)
 -- used to be called mkSysModuleFS
 mkSysModuleNameFS :: EncodedFS -> ModuleName
 mkSysModuleNameFS s = ModuleName s 
-
--- Make a module in this package
-mkModuleInThisPackage :: ModuleName -> Module
-mkModuleInThisPackage nm = Module nm ThisPackage
 \end{code}
 
 \begin{code}
@@ -242,28 +247,39 @@ mkModule mod_nm pack_name
 mkHomeModule :: ModuleName -> Module
 mkHomeModule mod_nm = Module mod_nm ThisPackage
 
+isHomeModule :: Module -> Bool
+isHomeModule (Module nm ThisPackage) = True
+isHomeModule _                       = False
+
 -- Used temporarily when we first come across Foo.x in an interface
 -- file, but before we've opened Foo.hi.
--- (Until we've opened Foo.hi we don't know what the PackageInfo is.)
+-- (Until we've opened Foo.hi we don't know what the Package is.)
 mkVanillaModule :: ModuleName -> Module
 mkVanillaModule name = Module name DunnoYet
 
+isVanillaModule :: Module -> Bool
+isVanillaModule (Module nm DunnoYet) = True
+isVanillaModule _                       = False
+
 mkPrelModule :: ModuleName -> Module
 mkPrelModule name = mkModule name preludePackage
 
+isPrelModule :: Module -> Bool
+isPrelModule (Module nm (AnotherPackage p)) | p == preludePackage = True
+isPrelModule _                       = False
+
 moduleString :: Module -> EncodedString
 moduleString (Module (ModuleName fs) _) = _UNPK_ fs
 
 moduleName :: Module -> ModuleName
-moduleName (Module mod _) = mod
+moduleName (Module mod pkg_info) = mod
+
+modulePackage :: Module -> PackageName
+modulePackage (Module mod pkg_info) = packageInfoPackage pkg_info
 
 moduleUserString :: Module -> UserString
 moduleUserString (Module mod _) = moduleNameUserString mod
 
-isModuleInThisPackage :: Module -> Bool
-isModuleInThisPackage (Module nm ThisPackage) = True
-isModuleInThisPackage _                       = False
-
 printModulePrefix :: Module -> Bool
   -- When printing, say M.x
 printModulePrefix (Module nm ThisPackage) = False