Files
2024B1-AP/a3/apl.hs
2024-09-28 15:16:53 +02:00

36 lines
856 B
Haskell

module Main (main) where
import APL.Eval (Val (..), eval, runEval)
import APL.Parser (parseAPL)
import System.Environment
( getArgs,
getProgName,
)
import System.Exit (ExitCode (..), exitWith)
import System.IO (hPutStrLn, stderr, stdout)
stringVal :: Val -> String
stringVal (ValBool b) = show b
stringVal (ValInt x) = show x
stringVal ValFun {} = "#<fun>"
main :: IO ()
main = do
args <- getArgs
case args of
[fname] -> do
s <- readFile fname
case parseAPL fname s of
Left err -> hPutStrLn stderr err
Right e -> case runEval (eval e) of
Left err -> hPutStrLn stderr err
Right v -> hPutStrLn stdout $ stringVal v
_ -> do
prog <- getProgName
failure $ "Usage: " ++ prog ++ " FILE"
pure ()
where
failure s = do
hPutStrLn stderr s
exitWith $ ExitFailure 1