packages feed

hesql-0.7: HESQL.hs

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
             case modl of
               Left err -> do
                     print err
                     exitWith $ ExitFailure 1
               Right modl' -> do
                     outp <- generateCode file opts modl'
                     writeFile (outputFile file) $
                       prettyPrint outp