module Reading where

import Language.C
import System.Exit
import System.IO

parseToExpr :: String -> IO CExpr
parseToExpr str = runP expressionP str

runP :: P CExpr -> String -> IO CExpr
runP parser str =
  do
    expr <- either bailOut return $ pResult
    return expr
  where
  is = inputStreamFromString str
  pResult = execParser_ parser is (argPos)
  argPos = initPos "<cmd-line-arg>"

bailOut :: (Show err) => err -> IO a
bailOut err = do
  hPutStrLn stderr (show err)
  hPutStrLn stderr "*** Exit on Error ***"
  exitWith (ExitFailure 1)