oplang-0.2.0.0: src/Main.hs
module Main(main) where
import Control.Monad.IO.Class(liftIO)
import Control.Monad.Reader(asks)
import Data.Foldable(traverse_)
import Data.Text(Text)
import Data.Text.IO qualified as T
import System.Exit(exitFailure)
import Control.Monad.Comp(Comp, runComp)
import Data.Opts(getOpts, Opts(..))
import Language.OpLang.Checker(check)
import Language.OpLang.Codegen(compile)
import Language.OpLang.Optimizer(optimize)
import Language.OpLang.Parser(parse)
getCode :: Comp Text
getCode = liftIO . T.readFile =<< asks optsPath
pipeline :: Comp ()
pipeline =
getCode
>>= parse
>>= check
>>= optimize
>>= compile
main :: IO ()
main = do
opts <- getOpts
(warnings, result) <- runComp opts pipeline
traverse_ T.putStrLn warnings
maybe exitFailure pure result