Lookup module and package defining <<x>?
Marc Weber
marco-oweber at gmx.de
Tue Aug 8 08:50:31 EDT 2006
> $ghc-pkg --where-from ParseError
> package parsec: defining modules: Text.ParserCombinators.Parsec.Error, Text.ParserCombinators.Parsec
>
> ?
This is what I've done by now... It took me some days to notice that the
./ghc-pkg symlinks to ghc-pkg-6.5xxxx which calls the ghc-pkg from /usr/lib/...
but not my modified version ;) ./ghc-pkg.bin was what I was looking for..
By now you can only search for modules...
I want to add support for functions..
I could use ghc -show-iface.. Problem: ghc takes about 0.2 s to launch on my
system. Dumping all installed ifaces (ghc -show-iface <list of all hi files>)
doesn't take much additional time..
That's why I want to include the MkIface module from ghc.. (beeing in another directory)
I'm not sure where to add the -i option in the makefile so that ghc can find the module..
One way would be adding the option to EXTRA_SRCS but I hope there is a better possibility
Marc
< {-# OPTIONS -fglasgow-exts #-}
---
> whereFrom OPTIONS -fglasgow-exts #-}
18,20d17
< #ifdef WHERE_FROM
< import MkIface
< #endif
185,189d181
< #ifdef WHERE_FROM
< " $p where-from {id}\n" ++
< " Which package/module contains this module/ declaration?\n" ++
< "\n" ++
< #endif
237,240d228
< #ifdef WHERE_FROM
< ["where-from", id] -> do
< whereFrom cli id
< #endif
469,500d456
< #ifdef WHERE_FROM
< -- -----------------------------------------------------------------------------
< -- Where from find the modul or package containing the id
<
< whereFrom :: [Flag] -> String -> IO ()
< whereFrom flags id =
< let simple_output = FlagSimpleOutput `elem` flags
< in do db_stack <- getPkgDatabases False flags
< let all_pkgs = concat (map snd db_stack) :: [InstalledPackageInfo]
< -- looking for modules with name id
< let exposedModulesMatches = ("exposed matching modules",
< concatMap (getPkgNameAndModule exposedModules) all_pkgs ) :: (String, [String])
< let hiddenModulesMatches = ("hidden matching modules",
< concatMap (getPkgNameAndModule hiddenModules) all_pkgs )
< -- looking for data
< -- looking for type
< -- looking for newtype
< -- looking for functions
< let matchingResult = filter ((/= []).snd) [exposedModulesMatches, hiddenModulesMatches]
< case matchingResult of
< [] -> putStrLn "no matches found"
< results -> do putStrLn "maches :"
< mapM_ (\(category, matches) -> putStrLn (category ++ ":") >> mapM_ putStrLn matches) results
<
< where getPkgNameAndModule modules pkginfo = [ formatFoundModule ((showPackageId.package) pkginfo) m | m <- modules pkginfo, (m == id) ]
< formatFoundModule pkg module_ = pkg ++ ": " ++ module_
< scanPackage pkg scanModule = lifM2 (++) (concatMap (scanModule "") (exposedModules pkg))
< (concatMap (scanModule "hidden") (hiddenModules pkg))
< where scanModule hidden_text module_ =
<
< #endif
More information about the Glasgow-haskell-users
mailing list