diff options
Diffstat (limited to 'ast/CC')
-rw-r--r-- | ast/CC/AST/Source.hs | 5 | ||||
-rw-r--r-- | ast/CC/AST/Typed.hs | 70 | ||||
-rw-r--r-- | ast/CC/Context.hs | 2 |
3 files changed, 40 insertions, 37 deletions
diff --git a/ast/CC/AST/Source.hs b/ast/CC/AST/Source.hs index 3d7d5ea..11b7bc6 100644 --- a/ast/CC/AST/Source.hs +++ b/ast/CC/AST/Source.hs @@ -1,4 +1,7 @@ -module CC.AST.Source(module CC.AST.Source, module CC.Types) where +module CC.AST.Source( + module CC.AST.Source, + module CC.Types +) where import Data.List diff --git a/ast/CC/AST/Typed.hs b/ast/CC/AST/Typed.hs index 537c7a4..26f7b5c 100644 --- a/ast/CC/AST/Typed.hs +++ b/ast/CC/AST/Typed.hs @@ -9,68 +9,68 @@ import CC.Pretty import CC.Types -data ProgramT = ProgramT [DefT] +data Program = Program [Def] deriving (Show, Read) -data DefT = DefT Name ExprT +data Def = Def Name Expr deriving (Show, Read) -data TypeT = TFunT TypeT TypeT - | TIntT - | TTupT [TypeT] - | TyVar Int +data Type = TFun Type Type + | TInt + | TTup [Type] + | TyVar Int deriving (Show, Read) -data TypeSchemeT = TypeSchemeT [Int] TypeT +data TypeScheme = TypeScheme [Int] Type deriving (Show, Read) -data ExprT = LamT TypeT Occ ExprT - | CallT TypeT ExprT ExprT - | IntT Int - | TupT [ExprT] - | VarT Occ +data Expr = Lam Type Occ Expr + | Call Type Expr Expr + | Int Int + | Tup [Expr] + | Var Occ deriving (Show, Read) -data Occ = Occ Name TypeT +data Occ = Occ Name Type deriving (Show, Read) -exprType :: ExprT -> TypeT -exprType (LamT typ _ _) = typ -exprType (CallT typ _ _) = typ -exprType (IntT _) = TIntT -exprType (TupT es) = TTupT (map exprType es) -exprType (VarT (Occ _ typ)) = typ +exprType :: Expr -> Type +exprType (Lam typ _ _) = typ +exprType (Call typ _ _) = typ +exprType (Int _) = TInt +exprType (Tup es) = TTup (map exprType es) +exprType (Var (Occ _ typ)) = typ -instance Pretty TypeT where - prettyPrec _ TIntT = "Int" - prettyPrec p (TFunT a b) = +instance Pretty Type where + prettyPrec _ TInt = "Int" + prettyPrec p (TFun a b) = precParens p 2 (prettyPrec 3 a ++ " -> " ++ prettyPrec 2 b) - prettyPrec _ (TTupT ts) = + prettyPrec _ (TTup ts) = "(" ++ intercalate ", " (map pretty ts) ++ ")" prettyPrec _ (TyVar i) = 't' : show i -instance Pretty TypeSchemeT where - prettyPrec p (TypeSchemeT bnds ty) = +instance Pretty TypeScheme where + prettyPrec p (TypeScheme bnds ty) = precParens p 2 ("forall " ++ intercalate " " (map (pretty . TyVar) bnds) ++ ". " ++ prettyPrec 2 ty) -instance Pretty ExprT where - prettyPrec p (LamT ty (Occ n t) e) = +instance Pretty Expr where + prettyPrec p (Lam ty (Occ n t) e) = precParens p 2 $ "(\\(" ++ n ++ " :: " ++ pretty t ++ ") -> " ++ prettyPrec 2 e ++ ") :: " ++ pretty ty - prettyPrec p (CallT ty e1 e2) = + prettyPrec p (Call ty e1 e2) = precParens p 2 $ prettyPrec 3 e1 ++ " " ++ prettyPrec 3 e2 ++ " :: " ++ pretty ty - prettyPrec _ (IntT i) = show i - prettyPrec _ (TupT es) = "(" ++ intercalate ", " (map pretty es) ++ ")" - prettyPrec p (VarT (Occ n t)) = + prettyPrec _ (Int i) = show i + prettyPrec _ (Tup es) = "(" ++ intercalate ", " (map pretty es) ++ ")" + prettyPrec p (Var (Occ n t)) = precParens p 2 $ show n ++ " :: " ++ pretty t -instance Pretty DefT where - pretty (DefT n e) = n ++ " = " ++ pretty e +instance Pretty Def where + pretty (Def n e) = n ++ " = " ++ pretty e -instance Pretty ProgramT where - pretty (ProgramT defs) = concatMap ((++ "\n") . pretty) defs +instance Pretty Program where + pretty (Program defs) = concatMap ((++ "\n") . pretty) defs diff --git a/ast/CC/Context.hs b/ast/CC/Context.hs index 0a54392..b86685d 100644 --- a/ast/CC/Context.hs +++ b/ast/CC/Context.hs @@ -7,4 +7,4 @@ import CC.AST.Typed data Context = Context FilePath Builtins -- | Information about builtins supported by the enabled backend -data Builtins = Builtins [(Name, TypeT)] +data Builtins = Builtins [(Name, Type)] |