From bc52411ae2ed26cab1d5086ae6df68f23ebbd052 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Wed, 10 Jun 2020 19:59:03 +0200 Subject: Initial state I found the code in --- main/Main.hs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 main/Main.hs (limited to 'main') diff --git a/main/Main.hs b/main/Main.hs new file mode 100644 index 0000000..58e475c --- /dev/null +++ b/main/Main.hs @@ -0,0 +1,33 @@ +module Main where + +import System.Exit + +import qualified CC.Parser +import qualified CC.Typecheck +import CC.Types + + +-- Put the passes in a type-level list to be able to run subsequences of +-- passes. + + +type Pass a b = Context -> a -> Either String b + +pass :: (Read a, Show b, Show e) => (Context -> a -> Either e b) -> Pass a b +pass f ctx a = either (Left . show) Right (f ctx a) + +passJoin :: (Read a, Show b, Read b, Show c) => Pass a b -> Pass b c -> Pass a c +passJoin f1 f2 ctx a = f1 ctx a >>= f2 ctx + +main :: IO () +main = do + let parse = pass CC.Parser.runPass + typecheck = pass CC.Typecheck.runPass + + let combined = parse `passJoin` typecheck + + source <- getContents + let context = Context "" + case combined context (read source) of + Right prog -> print prog + Left err -> die (show err) -- cgit v1.2.3-70-g09d2