Fixed ExpT

This commit is contained in:
Samuel Hammersberg 2023-03-23 20:20:17 +01:00
parent c6e8305215
commit c85010a8a1
2 changed files with 19 additions and 15 deletions

View file

@ -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