module Main (main) where import System.Environment import Language.Haskell.Pretty import System.FilePath import Language.Haskell.Pretty import HESQL.Parser (hesqlModule) import HESQL.Translator import Control.Monad(when, forM_) import Text.Parsec.String (parseFromFile) import System.Exit import HESQL.Options import Paths_hesql ( version ) import Data.Version (showVersion) outputFile :: FilePath -> FilePath outputFile file = replaceExtension file ".hs" main :: IO () main = do putStrLn $ "hesql " ++ showVersion version argv <- getArgs case getOpts argv of Left msg -> putStrLn msg Right (opts, files) -> do forM_ files $ \ file -> do when (outputFile file == file) $ error (file ++ "has a wrong extension") modl <- parseFromFile (hesqlModule file) file case modl of Left err -> do print err exitWith $ ExitFailure 1 Right modl' -> do outp <- generateCode file opts modl' writeFile (outputFile file) $ prettyPrint outp