29 lines
694 B
Haskell
29 lines
694 B
Haskell
{-# LANGUAGE LambdaCase #-}
|
|
|
|
module Main where
|
|
|
|
import Control.Monad.Trans.Except (runExceptT)
|
|
import Data.Text (Text)
|
|
import qualified Data.Text.IO as T
|
|
import System.Environment (getArgs)
|
|
|
|
import Language.Epsilon.Parser (parse)
|
|
import Language.Epsilon.Types (runEvalM)
|
|
import Language.Epsilon.Eval (eval)
|
|
|
|
main :: IO ()
|
|
main = getArgs >>= \case
|
|
[] -> T.getContents >>= go "<stdin>"
|
|
[x] -> T.readFile x >>= go x
|
|
_ -> putStrLn "not sure what to do with these cli args"
|
|
|
|
go :: FilePath -> Text -> IO ()
|
|
go fp s =
|
|
case parse fp s of
|
|
Left pe -> print pe
|
|
Right ast -> do
|
|
runExceptT (runEvalM $ eval ast) >>= \case
|
|
Left e -> print e
|
|
Right res -> print res
|
|
|