-- | All you need to parse a module.
module Language.Haskell.DTC.Parser
    ( -- * From "Language.Haskell.Parser"
      ParseResult
    , HsModule
    , parseModule
      -- * Extras
    , parseModuleWithFN
    , parseModuleWithSrc
     ) where

import Language.Haskell.Syntax
import Language.Haskell.Parser

-- | @parseModuleWithFN fileName module@ parse @module@ with a @fileName@ associated.
parseModuleWithFN :: FilePath -> String -> ParseResult HsModule
parseModuleWithFN = parseModuleWithMode . ParseMode

-- | Parse a module from a source code file. It throws an error if parsing fails.
parseModuleWithSrc :: FilePath -> IO HsModule
parseModuleWithSrc fp =
      do str <- readFile fp
         let r = parseModuleWithFN fp str
         case r of
           ParseOk p -> return p
           ParseFailed loc err -> do fail $ concat [ err
                                                   , " at: " , srcFilename loc
                                                   , ":" , show $ srcLine loc
                                                   , ":" , show $ srcColumn loc
                                                    ]