Fix TypeCheckerIr
This commit is contained in:
parent
623c6d1e58
commit
b7be75aa1e
1 changed files with 74 additions and 0 deletions
|
|
@ -133,3 +133,77 @@ instance Print t => Print (Exp' t) where
|
||||||
]
|
]
|
||||||
EAbs v e -> prPrec i 0 $ concatD
|
EAbs v e -> prPrec i 0 $ concatD
|
||||||
[ doc $ showString "\\"
|
[ doc $ showString "\\"
|
||||||
|
, prt 0 v
|
||||||
|
, doc $ showString "."
|
||||||
|
, prt 0 e
|
||||||
|
]
|
||||||
|
|
||||||
|
ECase e branches -> prPrec i 0 $ concatD
|
||||||
|
[ doc $ showString "case"
|
||||||
|
, prt 0 e
|
||||||
|
, doc $ showString "of"
|
||||||
|
, doc $ showString "{"
|
||||||
|
, prt 0 branches
|
||||||
|
, doc $ showString "}"
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
instance Print t => Print (Branch' t) where
|
||||||
|
prt i (Branch (pattern_, t) exp) = prPrec i 0 (concatD [doc (showString "("), prt 0 pattern_, doc (showString " : "), prt 0 t, doc (showString ")"), doc (showString "=>"), prt 0 exp])
|
||||||
|
|
||||||
|
instance Print t => Print [Branch' t] where
|
||||||
|
prt _ [] = concatD []
|
||||||
|
prt _ [x] = concatD [prt 0 x]
|
||||||
|
prt _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]
|
||||||
|
|
||||||
|
instance Print t => Print (Def' t) where
|
||||||
|
prt i = \case
|
||||||
|
DBind bind -> prPrec i 0 (concatD [prt 0 bind])
|
||||||
|
DData data_ -> prPrec i 0 (concatD [prt 0 data_])
|
||||||
|
|
||||||
|
instance Print t => Print (Data' t) where
|
||||||
|
prt i = \case
|
||||||
|
Data type_ injs -> prPrec i 0 (concatD [doc (showString "data"), prt 0 type_, doc (showString "where"), doc (showString "{"), prt 0 injs, doc (showString "}")])
|
||||||
|
|
||||||
|
instance Print t => Print (Inj' t) where
|
||||||
|
prt i = \case
|
||||||
|
Inj uident type_ -> prPrec i 0 (concatD [prt 0 uident, doc (showString ":"), prt 0 type_])
|
||||||
|
|
||||||
|
instance Print t => Print (Pattern' t) where
|
||||||
|
prt i = \case
|
||||||
|
PVar name -> prPrec i 1 (concatD [prt 0 name])
|
||||||
|
PLit (lit, _) -> prPrec i 1 (concatD [prt 0 lit])
|
||||||
|
PCatch -> prPrec i 1 (concatD [doc (showString "_")])
|
||||||
|
PEnum name -> prPrec i 1 (concatD [prt 0 name])
|
||||||
|
PInj uident patterns -> prPrec i 0 (concatD [prt 0 uident, prt 1 patterns])
|
||||||
|
|
||||||
|
instance Print t => Print [Def' t] where
|
||||||
|
prt _ [] = concatD []
|
||||||
|
prt _ [x] = concatD [prt 0 x]
|
||||||
|
prt _ (x:xs) = concatD [prt 0 x, doc (showString ";"), prt 0 xs]
|
||||||
|
|
||||||
|
instance Print [Type] where
|
||||||
|
prt _ [] = concatD []
|
||||||
|
prt _ (x:xs) = concatD [prt 0 x, doc (showString " "), prt 0 xs]
|
||||||
|
|
||||||
|
instance Print Type where
|
||||||
|
prt i = \case
|
||||||
|
TLit uident -> prPrec i 1 (concatD [prt 0 uident])
|
||||||
|
TVar tvar -> prPrec i 1 (concatD [prt 0 tvar])
|
||||||
|
TData uident types -> prPrec i 1 (concatD [prt 0 uident, doc (showString "("), prt 0 types, doc (showString ")")])
|
||||||
|
TFun type_1 type_2 -> prPrec i 0 (concatD [prt 1 type_1, doc (showString "->"), prt 0 type_2])
|
||||||
|
TAll tvar type_ -> prPrec i 0 (concatD [doc (showString "forall"), prt 0 tvar, doc (showString "."), prt 0 type_])
|
||||||
|
|
||||||
|
type Program = Program' Type
|
||||||
|
type Def = Def' Type
|
||||||
|
type Data = Data' Type
|
||||||
|
type Bind = Bind' Type
|
||||||
|
type Branch = Branch' Type
|
||||||
|
type Pattern = Pattern' Type
|
||||||
|
type Inj = Inj' Type
|
||||||
|
type Exp = Exp' Type
|
||||||
|
type ExpT = ExpT' Type
|
||||||
|
type Id = Id' Type
|
||||||
|
pattern DBind' id vars expt = DBind (Bind id vars expt)
|
||||||
|
pattern DData' typ injs = DData (Data typ injs)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue