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

View file

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