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 ' 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