{-# LANGUAGE ViewPatterns #-} -- | Main command-line interface. module Main where import Haskell.Docs import Haskell.Docs.Types import Haskell.Docs.Ghc import qualified Control.Exception as E import System.Environment -- | Main entry point. main :: IO () main = do args <- getArgs E.catch (app args) (error . printEx) -- | Do the printing. app :: [String] -> IO () app (extract -> (gs,ms,as)) = withInitializedPackages gs (case as of [name] -> searchAndPrintDoc ms Nothing Nothing (Identifier name) [mname,name,pname] -> searchAndPrintDoc ms (Just (PackageName pname)) (Just (makeModuleName mname)) (Identifier name) [mname,name] -> searchAndPrintDoc ms Nothing (Just (makeModuleName mname)) (Identifier name) _ -> error " [] | ") -- | Extract arguments. extract :: [String] -> ([String],Bool,[String]) extract = go ([],False,[]) where go (gs,ms,as) ("-g":arg:ys) = go (arg:gs,ms,as) ys go (gs,ms,as) ("--modules":ys) = go (gs,True,as) ys go (gs,ms,as) (y:ys) = go (gs,ms,y:as) ys go (gs,ms,as) [] = (gs,ms,as) -- | Print an exception for humans. printEx :: DocsException -> String printEx e = case e of NoFindModule -> "Couldn't find any packages with that module." NoModulePackageCombo -> "Couldn't match a module with that package." NoInterfaceFiles -> "No interface files to search through! \ \Maybe you need to generate documentation for the package?" NoParseInterfaceFiles reasons -> "Couldn't parse interface files: " ++ unlines (map printEx reasons) NoFindNameInExports -> "Couldn't find that name in an export list." NoFindNameInInterface -> "Couldn't find name in interface." NoReadInterfaceFile _ -> "Couldn't read the interface file."