content: module ParseHaskellProgram where
  import ParseProgram(parseProgram)
  import HsParser(parse)
  import DefinedNamesBase() -- instances
  import ReAssocBase()      -- instances
  import ParsedSyntax(HsModuleR,ModuleName,Id,HsName)
  import WorkModule(WorkModuleI)
  
  {-+
  This is a function to parse a plain Haskell program. Given a list of files
  containing the modules of a Haskell program, it returns a list of strongly
  connected components of modules, and an association list giving information
  for each module what is in scope and what is exported.
  -}
  parseHaskellProgram:: 
      [FilePath] -> IO ([[HsModuleR]], [(ModuleName, WorkModuleI HsName Id)])
  parseHaskellProgram = parseProgram parse
  
  {-+
  The function is constructed from the reusable function parseProgram,
  which takes a module parser as an argument. This allows it to be used
  for variants of Haskell, e.g. where there are new forms of
  declarations or expressions. For this to work, there must be instances
  in some classes for the type of declarations.  See the module
  ParseProgram for details.
  -}
  