perga/app/Main.hs
2024-11-17 18:33:14 -08:00

30 lines
760 B
Haskell

module Main where
import Control.Monad (void)
import qualified Data.Map as M
import qualified Data.Text.IO as T
import Eval (Env)
import Parser
import Repl
import System.Environment
import System.IO
main :: IO ()
main = do
args <- getArgs
case args of
[] -> void repl
[file] -> handleFile file
_ -> putStrLn "usage './perga' for repl and './perga <filename>' to get input from a file"
dumpEnv :: Env -> IO ()
dumpEnv = void . M.traverseWithKey ((putStrLn .) . showEnvEntry)
handleFile :: String -> IO ()
handleFile fileName =
do
fileH <- openFile fileName ReadMode
input <- T.hGetContents fileH
case parseProgram input of
Left err -> putStrLn err
Right env -> dumpEnv env