2010-03-11 19:03:17 +09:00
|
|
|
module Browse (browseModule) where
|
|
|
|
|
|
2010-04-28 15:51:30 +09:00
|
|
|
import Control.Applicative
|
2010-03-11 19:03:17 +09:00
|
|
|
import Data.Char
|
|
|
|
|
import Data.List
|
2010-04-28 15:51:30 +09:00
|
|
|
import GHC
|
|
|
|
|
import Name
|
2010-04-30 18:36:31 +09:00
|
|
|
import Types
|
2010-03-11 19:03:17 +09:00
|
|
|
|
|
|
|
|
----------------------------------------------------------------
|
|
|
|
|
|
2010-03-11 22:39:07 +09:00
|
|
|
browseModule :: Options -> String -> IO String
|
2011-05-28 05:43:52 +09:00
|
|
|
browseModule opt mdlName = convert opt . format <$> browse opt mdlName
|
2010-03-11 19:03:17 +09:00
|
|
|
where
|
2011-01-27 14:29:39 +09:00
|
|
|
format
|
|
|
|
|
| operators opt = formatOps
|
|
|
|
|
| otherwise = removeOps
|
|
|
|
|
removeOps = sort . filter (isAlpha.head)
|
|
|
|
|
formatOps = sort . map formatOps'
|
|
|
|
|
formatOps' x@(s:_)
|
|
|
|
|
| isAlpha s = x
|
|
|
|
|
| otherwise = '(' : x ++ ")"
|
|
|
|
|
formatOps' [] = error "formatOps'"
|
2010-03-11 19:03:17 +09:00
|
|
|
|
2011-05-28 05:43:52 +09:00
|
|
|
browse :: Options -> String -> IO [String]
|
|
|
|
|
browse opt mdlName = withGHC $ do
|
|
|
|
|
initSession0 opt
|
2010-04-30 16:27:10 +09:00
|
|
|
maybeNamesToStrings <$> lookupModuleInfo
|
2010-04-27 10:28:00 +09:00
|
|
|
where
|
2010-04-28 17:02:59 +09:00
|
|
|
lookupModuleInfo = findModule (mkModuleName mdlName) Nothing >>= getModuleInfo
|
2010-04-28 15:51:30 +09:00
|
|
|
maybeNamesToStrings = maybe [] (map getOccString . modInfoExports)
|