From d1cb805a26483cb64fea221cea4991c097f90fc0 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Sat, 20 Nov 2021 08:54:46 +0100 Subject: Initial WIP --- AST.hs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 AST.hs (limited to 'AST.hs') diff --git a/AST.hs b/AST.hs new file mode 100644 index 0000000..f8f3624 --- /dev/null +++ b/AST.hs @@ -0,0 +1,52 @@ +module AST where + + +data Program t = Program [FunDef t] + deriving (Show) + +data FunDef t = FunDef Name (Maybe Type) [FunEq t] + deriving (Show) + +newtype Name = Name String + deriving (Show) + +data Type + = TApp Name [Type] + | TTup [Type] + | TList Type + | TFun Type Type + deriving (Show) + +data FunEq t = FunEq Name [Pattern t] (RHS t) + deriving (Show) + +data Pattern t + = PWildcard t + | PVar t Name + | PAs t Name (Pattern t) + | PCon t Name [Pattern t] + | PList t [Pattern t] + | PTup t [Pattern t] + deriving (Show) + +data RHS t + = Guarded [(Expr t, Expr t)] + | Plain (Expr t) + deriving (Show) + +data Expr t + = ELit t Literal + | EList t [Expr t] + | ETup t [Expr t] + | EApp t (Expr t) (Expr t) + | EOp t (Expr t) Operator (Expr t) + | EIf t (Expr t) (Expr t) (Expr t) + | ECase t (Expr t) [(Pattern t, RHS t)] + | ELet t [FunDef t] (Expr t) + deriving (Show) + +data Literal = LInt Int | LFloat Double | LChar Char | LString String + deriving (Show) + +data Operator = OAdd | OSub | OMul | ODiv | OMod + deriving (Show) -- cgit v1.2.3-70-g09d2