-GLOBAL_VAR(v_HomeDirCache, emptyFM, FiniteMap String FilePath)
-
--- caches finder mapping, expunged whenever we create a new finder.
-GLOBAL_VAR(v_FinderMapCache, emptyFM, FiniteMap ModuleName Module)
-
-
-newFinder :: PackageConfigInfo -> IO Finder
-newFinder (PackageConfigInfo pkgs) = do
- -- expunge our caches
- writeIORef v_HomeDirCache emptyFM
- writeIORef v_FinderMapCache emptyFM
-
- -- populate the home dir cache, using the import path (the import path
- -- is changed by -i flags on the command line, and defaults to ["."]).
- home_imports <- readIORef v_Import_paths
- let extendFM fm path = do
- contents <- getDirectoryContents' path
- return (addListToFM fm (zip contents (repeat path)))
- home_map <- foldM extendFM emptyFM home_imports
- writeIORef v_HomeDirCache home_map
-
- -- populate the package cache, if necessary
- pkg_cache <- readIORef v_PkgDirCache
- case pkg_cache of
- Nothing -> do
-
- let extendFM fm pkg = do
- let dirs = import_dirs pkg
- pkg_name = _PK_ (name pkg)
- let addDir fm dir = do
- contents <- getDirectoryContents' dir
- return (addListToFM fm (zip contents
- (repeat (pkg_name,dir))))
- foldM addDir fm dirs
-
- pkg_map <- foldM extendFM emptyFM pkgs
- writeIORef v_PkgDirCache (Just pkg_map)
-
- Just _ ->
- return ()
-
- -- and return the finder
- return finder
-
+GLOBAL_VAR(v_HomeDirCache, Nothing, Maybe (FiniteMap String FilePath))
+
+
+initFinder :: PackageConfigInfo -> IO ()
+initFinder pkgs = do
+ -- expunge our home cache
+ writeIORef v_HomeDirCache Nothing
+ -- lazilly fill in the package cache
+ writeIORef v_PkgDirCache (unsafePerformIO (newPkgCache pkgs))
+ pkg_dbg_info <- readIORef v_PkgDirCache
+ putStrLn (unlines (map show (fmToList pkg_dbg_info)))
+
+findModule :: ModuleName -> IO (Maybe (Module, ModuleLocation))
+findModule name = do
+ hPutStr stderr ("findModule: " ++ moduleNameUserString name ++ " ... ")
+ maybe_m <- findModule_wrk name
+ case maybe_m of
+ Nothing -> hPutStrLn stderr "Not Found"
+ Just mm -> hPutStrLn stderr (showSDoc (ppr (snd mm)))
+ return maybe_m