{---- - Eval.hs - executable for evaluating a computation provide on stdin - in the context of a module optionally provided on the - command line. ---- - Author: Jesse Rudolph - See LICENSE for licensing details ----------------------------------------------------------------- -} module Main ( main ) where import System.Environment import Data.List import System.IO import qualified Language.Noodle.Banner as Banner import Language.Noodle.DepTree import Language.Noodle.Evaluation import Language.Noodle.Lib.Basic import Language.Noodle.Syntax import Language.Noodle.Parsing.String import Language.Noodle.Parsing.Noodle main = do args <- getArgs case args of [] -> ev env [filepath] -> exec filepath _ -> error "invalid command line arguments" -- execute a source file exec :: FilePath -> IO () exec file = do val <- compileFile env file case val of Module e -> do env <- e ev env Error err -> error ("Uncaught Error\n" ++ show err) v -> error $ file ++ " compiled to something other than a module (bug)" ev :: Env -> IO () ev e = do i <- getContents case (runp comp (startPos,()) i) of Success res _ _ -> do v <- compute e res case v of Error err -> error $ show err _ -> putStrLn $ show v Failure msg ((_,rel,line),_) -> error $ (show $ Error $ BadParse i line rel msg)