Fixed ExpT
This commit is contained in:
parent
c6e8305215
commit
c85010a8a1
2 changed files with 19 additions and 15 deletions
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue