From c85010a8a1cba12e59aa8dfe29c92d9f689fce2f Mon Sep 17 00:00:00 2001 From: Samuel Hammersberg Date: Thu, 23 Mar 2023 20:20:17 +0100 Subject: [PATCH] Fixed ExpT --- src/Monomorphizer/Monomorphizer.hs | 23 ++++++++++++----------- src/Monomorphizer/MonomorphizerIr.hs | 11 +++++++---- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/Monomorphizer/Monomorphizer.hs b/src/Monomorphizer/Monomorphizer.hs index a2c7317..6bb16fb 100644 --- a/src/Monomorphizer/Monomorphizer.hs +++ b/src/Monomorphizer/Monomorphizer.hs @@ -2,9 +2,10 @@ module Monomorphizer.Monomorphizer (monomorphize) where -import Grammar.Abs (Ident (..)) -import Monomorphizer.MonomorphizerIr -import TypeChecker.TypeCheckerIr qualified as T +import Grammar.Abs (Ident (..)) +import Monomorphizer.MonomorphizerIr +import qualified Monomorphizer.MonomorphizerIr as M +import qualified TypeChecker.TypeCheckerIr as T monomorphize :: T.Program -> Program monomorphize (T.Program ds) = Program $ monoDefs ds @@ -14,12 +15,12 @@ monoDefs = map monoDef monoDef :: T.Def -> Def monoDef (T.DBind bind) = DBind $ monoBind bind -monoDef (T.DData d) = DData d +monoDef (T.DData d) = DData d monoBind :: T.Bind -> Bind monoBind (T.Bind name args (e, t)) = Bind name args (e, t) -monoExpr :: T.Exp -> Exp +monoExpr :: T.Exp -> M.Exp monoExpr = \case T.EId (Ident i) -> EId (Ident i) T.ELit lit -> ELit $ monoLit lit @@ -30,19 +31,19 @@ monoExpr = \case T.ECase expt injs -> ECase (monoexpt expt) (monoInjs injs) monoType :: T.Type -> Type -monoType (T.TAll _ t) = monoType t +monoType (T.TAll _ t) = monoType t monoType (T.TVar (T.MkTVar i)) = error "NOT POLYMORPHIC TYPES" -monoType (T.TLit i) = TLit i -monoType (T.TFun t1 t2) = TFun (monoType t1) (monoType t2) +monoType (T.TLit i) = TLit i +monoType (T.TFun t1 t2) = TFun (monoType t1) (monoType t2) -monoexpt :: T.ExpT -> ExpT -monoexpt (e, t) = (e, t) +monoexpt :: T.ExpT -> M.ExpT +monoexpt (e, t) = (monoExpr e, monoType t) monoId :: T.Id -> Id monoId = id monoLit :: T.Lit -> Lit -monoLit (T.LInt i) = LInt i +monoLit (T.LInt i) = LInt i monoLit (T.LChar c) = LChar c monoInjs = map monoInj diff --git a/src/Monomorphizer/MonomorphizerIr.hs b/src/Monomorphizer/MonomorphizerIr.hs index aa25f42..ce8e1e3 100644 --- a/src/Monomorphizer/MonomorphizerIr.hs +++ b/src/Monomorphizer/MonomorphizerIr.hs @@ -1,9 +1,10 @@ module Monomorphizer.MonomorphizerIr (module Monomorphizer.MonomorphizerIr, module RE, module GA) where -import Grammar.Abs (Data, Ident, Init) -import Grammar.Abs qualified as GA (Data, Ident, Init) -import TypeChecker.TypeCheckerIr (ExpT, Id, Indexed) -import TypeChecker.TypeCheckerIr qualified as RE (ExpT, Id, Indexed) +import Grammar.Abs (Data (..), Ident (..), Init (..)) +import qualified Grammar.Abs as GA (Data (..), Ident (..), + Init (..)) +import qualified TypeChecker.TypeCheckerIr as RE (Id, Indexed) +import TypeChecker.TypeCheckerIr (Id, Indexed) newtype Program = Program [Def] deriving (Show, Ord, Eq) @@ -26,6 +27,8 @@ data Exp data Injection = Injection (Init, Type) ExpT deriving (Eq, Ord, Show) +type ExpT = (Exp, Type) + data Constructor = Constructor Ident [Type] deriving (Show, Ord, Eq)