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

@ -4,7 +4,8 @@ module Monomorphizer.Monomorphizer (monomorphize) where
import Grammar.Abs (Ident (..)) import Grammar.Abs (Ident (..))
import Monomorphizer.MonomorphizerIr import Monomorphizer.MonomorphizerIr
import TypeChecker.TypeCheckerIr qualified as T import qualified Monomorphizer.MonomorphizerIr as M
import qualified TypeChecker.TypeCheckerIr as T
monomorphize :: T.Program -> Program monomorphize :: T.Program -> Program
monomorphize (T.Program ds) = Program $ monoDefs ds monomorphize (T.Program ds) = Program $ monoDefs ds
@ -19,7 +20,7 @@ monoDef (T.DData d) = DData d
monoBind :: T.Bind -> Bind monoBind :: T.Bind -> Bind
monoBind (T.Bind name args (e, t)) = Bind name args (e, t) monoBind (T.Bind name args (e, t)) = Bind name args (e, t)
monoExpr :: T.Exp -> Exp monoExpr :: T.Exp -> M.Exp
monoExpr = \case monoExpr = \case
T.EId (Ident i) -> EId (Ident i) T.EId (Ident i) -> EId (Ident i)
T.ELit lit -> ELit $ monoLit lit T.ELit lit -> ELit $ monoLit lit
@ -35,8 +36,8 @@ monoType (T.TVar (T.MkTVar i)) = error "NOT POLYMORPHIC TYPES"
monoType (T.TLit i) = TLit i monoType (T.TLit i) = TLit i
monoType (T.TFun t1 t2) = TFun (monoType t1) (monoType t2) monoType (T.TFun t1 t2) = TFun (monoType t1) (monoType t2)
monoexpt :: T.ExpT -> ExpT monoexpt :: T.ExpT -> M.ExpT
monoexpt (e, t) = (e, t) monoexpt (e, t) = (monoExpr e, monoType t)
monoId :: T.Id -> Id monoId :: T.Id -> Id
monoId = id monoId = id

View file

@ -1,9 +1,10 @@
module Monomorphizer.MonomorphizerIr (module Monomorphizer.MonomorphizerIr, module RE, module GA) where module Monomorphizer.MonomorphizerIr (module Monomorphizer.MonomorphizerIr, module RE, module GA) where
import Grammar.Abs (Data, Ident, Init) import Grammar.Abs (Data (..), Ident (..), Init (..))
import Grammar.Abs qualified as GA (Data, Ident, Init) import qualified Grammar.Abs as GA (Data (..), Ident (..),
import TypeChecker.TypeCheckerIr (ExpT, Id, Indexed) Init (..))
import TypeChecker.TypeCheckerIr qualified as RE (ExpT, Id, Indexed) import qualified TypeChecker.TypeCheckerIr as RE (Id, Indexed)
import TypeChecker.TypeCheckerIr (Id, Indexed)
newtype Program = Program [Def] newtype Program = Program [Def]
deriving (Show, Ord, Eq) deriving (Show, Ord, Eq)
@ -26,6 +27,8 @@ data Exp
data Injection = Injection (Init, Type) ExpT data Injection = Injection (Init, Type) ExpT
deriving (Eq, Ord, Show) deriving (Eq, Ord, Show)
type ExpT = (Exp, Type)
data Constructor = Constructor Ident [Type] data Constructor = Constructor Ident [Type]
deriving (Show, Ord, Eq) deriving (Show, Ord, Eq)