Parens removed on types and infix symbols work almost, just need to adapt in LLVM
This commit is contained in:
parent
c309c439cb
commit
0dc06eaf80
10 changed files with 494 additions and 437 deletions
|
|
@ -1,9 +1,12 @@
|
|||
{-# LANGUAGE LambdaCase #-}
|
||||
{-# LANGUAGE OverloadedStrings #-}
|
||||
|
||||
module Desugar.Desugar where
|
||||
module Desugar.Desugar (desugar) where
|
||||
|
||||
import Data.Function (on)
|
||||
import Debug.Trace (traceShow)
|
||||
import Grammar.Abs
|
||||
import Grammar.Print
|
||||
|
||||
{-
|
||||
|
||||
|
|
@ -37,7 +40,25 @@ desugarData :: Data -> Data
|
|||
desugarData (Data typ injs) = Data (desugarType typ) (map desugarInj injs)
|
||||
|
||||
desugarType :: Type -> Type
|
||||
desugarType t = t
|
||||
desugarType = \case
|
||||
TIdent (UIdent "Int") -> TLit "Int"
|
||||
TIdent (UIdent "Char") -> TLit "Char"
|
||||
TIdent ident -> TData ident []
|
||||
TApp t1 t2 ->
|
||||
let (name : tvars) = flatten t1 ++ [t2]
|
||||
in case name of
|
||||
TIdent ident -> TData ident (map desugarType tvars)
|
||||
_ -> error "desugarType in Desugar.hs is not implemented correctly"
|
||||
TLit l -> TLit l
|
||||
TVar v -> TVar v
|
||||
(TAll i t) -> TAll i (desugarType t)
|
||||
TFun t1 t2 -> TFun (desugarType t1) (desugarType t2)
|
||||
TEVar v -> TEVar v
|
||||
TData ident typ -> TData ident (map desugarType typ)
|
||||
where
|
||||
flatten :: Type -> [Type]
|
||||
flatten (TApp a b) = flatten a <> flatten b
|
||||
flatten a = [a]
|
||||
|
||||
desugarInj :: Inj -> Inj
|
||||
desugarInj (Inj ident typ) = Inj ident (desugarType typ)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue