packages feed

uhc-light-1.1.8.2: src-main/EHCRun.hs

module Main
where
import UHC.Light.Compiler.EHC.Main.Utils
import UHC.Light.Compiler.Base.API
import UHC.Light.Compiler.CoreRun.API
import UHC.Util.Pretty
import UHC.Util.FPath
import System.Exit
import System.Console.GetOpt
import System.IO
import Control.Monad
import System.Environment
import Data.List
import qualified Data.ByteString.Char8 as B

{-# LINE 31 "src/ehc/EHCRun.chs" #-}
-- | Top level main. TBD: hooks & customization
main :: IO ()
main = do
    args <- getArgs
    progName <- getProgName
    let opts0         = defaultEHCOpts
                          {ehcProgName = mkFPath progName}
        oo@(o,n,errs) = ehcrunCmdLineOptsApply args opts0
        opts          = maybe opts0 id o

    case ehcOptImmQuit opts of
      Just immq     -> handleImmQuitOption ehcrunCmdLineOpts ["rcr"] immq opts
      _             -> case (n,errs) of
        ([fname], []) -> run opts fname
        (_      , es) -> do
          putStr (head errs)
          exitFailure

  where run opts fname = do
            inp <- B.readFile fname
            case parseModFromString $ B.unpack inp of
              Left  es  -> forM_ es putStrLn
              Right mod -> do
                res <- runCoreRunIO opts mod
                case res of
                  Left  e   -> putStrLn $ show $ pp e
                  Right val -> putStrLn $ show $ pp val
{-
      _       ->
        putStrLn $ "Usage: " ++ progName ++ " file.rcr"
-}