ghc-mod/Browse.hs
2010-04-30 16:27:10 +09:00

29 lines
855 B
Haskell

module Browse (browseModule) where
import Control.Applicative
import Data.Char
import Data.List
import Exception
import GHC
import GHC.Paths (libdir)
import Name
import Param
----------------------------------------------------------------
browseModule :: Options -> String -> IO String
browseModule opt mdlName = convert opt . validate <$> browse mdlName
where
validate = sort . filter (isAlpha.head)
browse :: String -> IO [String]
browse mdlName = ghandle ignore $ runGhc (Just libdir) $ do
initSession
maybeNamesToStrings <$> lookupModuleInfo
where
initSession = getSessionDynFlags >>= setSessionDynFlags
lookupModuleInfo = findModule (mkModuleName mdlName) Nothing >>= getModuleInfo
maybeNamesToStrings = maybe [] (map getOccString . modInfoExports)
ignore :: SomeException -> IO [String]
ignore _ = return []