From b03df17e34621b40f8c5d6c222f5506a0415ef27 Mon Sep 17 00:00:00 2001 From: sebastianselander Date: Wed, 15 Feb 2023 18:10:28 +0100 Subject: [PATCH] Minor changes. Added a comment --- src/Main.hs | 37 +++++++++++++++++++++------------- src/TypeChecker/TypeChecker.hs | 9 ++++++--- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/src/Main.hs b/src/Main.hs index e9476fb..354e468 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -19,20 +19,29 @@ main = getArgs >>= \case putStrLn "SYNTAX ERROR" putStrLn err exitFailure - Right prg -> case rename prg of - Left err -> do - putStrLn "FAILED RENAMING" - putStrLn . show $ err - exitFailure - Right prg -> case typecheck prg of + Right prg -> do + putStrLn "" + putStrLn " ----- PARSER ----- " + putStrLn "" + putStrLn . printTree $ prg + putStrLn . show $ prg + case rename prg of Left err -> do - putStrLn "TYPECHECK ERROR" - putStrLn . show $ err - exitFailure - Right prg -> do + putStrLn "FAILED RENAMING" + putStrLn . show $ err + exitFailure + Right prg ->do + putStrLn "" + putStrLn " ----- RENAMER ----- " putStrLn "" putStrLn . printTree $ prg - putStrLn "" - putStrLn " ----- ADT ----- " - putStrLn "" - putStrLn $ show prg + case typecheck prg of + Left err -> do + putStrLn "TYPECHECK ERROR" + putStrLn . show $ err + exitFailure + Right prg -> do + putStrLn "" + putStrLn " ----- TYPECHECKER ----- " + putStrLn "" + putStrLn . printTree $ prg diff --git a/src/TypeChecker/TypeChecker.hs b/src/TypeChecker/TypeChecker.hs index cf1e7e8..34a27e9 100644 --- a/src/TypeChecker/TypeChecker.hs +++ b/src/TypeChecker/TypeChecker.hs @@ -12,6 +12,7 @@ import qualified Data.Map as M import Grammar.ErrM (Err) import Grammar.Print +import Debug.Trace (trace) import TypeChecker.TypeCheckerIr data Ctx = Ctx { vars :: Map Integer Type @@ -51,6 +52,7 @@ inferBind (RBind name e) = do insertSigs name t return $ TBind name t e' +-- This needs to be fixed. Should not separate inference of type and creation of the new data type. toTExpr :: RExp -> Infer TExp toTExpr = \case @@ -88,7 +90,6 @@ toTExpr = \case e' <- toTExpr e return $ TAbs num name e' t - inferExp :: RExp -> Infer Type inferExp = \case @@ -198,7 +199,7 @@ find = todo apply :: Type -> Type -> Infer Type apply (TArrow t1 t2) t3 | t1 == t3 = return t2 - | otherwise = throwError $ TypeMismatch "apply" +apply t1 t2 = throwError $ TypeMismatch "apply" {-# WARNING todo "TODO IN CODE" #-} todo :: a @@ -219,4 +220,6 @@ data Error lambda = RAbs 0 "x" (RAdd (RBound 0 "x") (RBound 0 "x")) lambda2 = RAbs 0 "x" (RAnn (RBound 0 "x") (TArrow (TMono "Int") (TMono "String"))) -fn_on_var = RAbs 0 "f" (RAbs 1 "x" (RApp (RBound 0 "f") (RBound 1 "x"))) +fn_on_var = RAbs 0 (Ident "f") (RAbs 1 (Ident "x") (RApp (RBound 0 (Ident "f")) (RBound 1 (Ident "x")))) + +bind = RBind "test" fn_on_var