git @ Cat's Eye Technologies Lanthorn / master src / Main.hs
master

Tree @master (Download .tar.gz)

Main.hs @masterraw · history · blame

module Main where

import System.Environment
import System.Exit
import System.IO

import qualified Language.Lanthorn.AST as AST
import qualified Language.Lanthorn.Pretty as Pretty
import qualified Language.Lanthorn.Parser as Parser
import qualified Language.Lanthorn.LetRec as LetRec
import qualified Language.Lanthorn.Eval as Eval


main = do
    args <- getArgs
    case args of
        ["pretty", fileName] -> do
            expr <- loadSource fileName
            putStrLn $ Pretty.pretty 0 expr
        ["desugar", fileName] -> do
            expr <- loadSource fileName
            putStrLn $ Pretty.pretty 0 $ LetRec.convert expr
        ["eval", fileName] -> do
            expr <- loadSource fileName
            case Eval.evalTopLevelExpr $ LetRec.convert expr of
                Right value ->
                    putStrLn $ show value
                Left error ->
                    abortWith $ show error
        _ -> do
            abortWith "Usage: lanthorn (pretty|desugar|eval) <input-filename>"

loadSource fileName = do
    text <- readFile fileName
    case Parser.parseExpr text of
        Right expr -> do
            return expr
        Left error ->
            abortWith $ show error

abortWith msg = do
    hPutStrLn stderr msg
    exitWith (ExitFailure 1)