definition module AST from Data.Maybe import :: Maybe from StdOverloaded import class toString :: Pos = {line :: Int, col :: Int} :: AST = AST [VarDecl] [FunDecl] :: VarDecl = VarDecl Pos Type String Expr :: Type = TupleType (Type, Type) | ListType Type | IdType String | IntType | BoolType | CharType | VarType | VoidType | (->>) infixl 7 Type Type :: Expr = VarExpr Pos VarDef | Op2Expr Pos Expr Op2 Expr | Op1Expr Pos Op1 Expr | IntExpr Pos Int | CharExpr Pos Char | BoolExpr Pos Bool | FunExpr Pos FunCall | EmptyListExpr Pos | TupleExpr Pos (Expr, Expr) :: VarDef = VarDef String [FieldSelector] :: FieldSelector = FieldHd | FieldTl | FieldFst | FieldSnd :: Op1 = UnNegation | UnMinus :: Op2 = BiPlus | BiMinus | BiTimes | BiDivide | BiMod | BiEquals | BiLesser | BiGreater | BiLesserEq | BiGreaterEq | BiUnEqual | BiAnd | BiOr | BiCons :: FunDecl = FunDecl Pos String [String] (Maybe Type) [VarDecl] [Stmt] :: FunCall = FunCall String [Expr] :: Stmt = IfStmt Expr [Stmt] [Stmt] | WhileStmt Expr [Stmt] | AssStmt VarDef Expr | FunStmt FunCall | ReturnStmt (Maybe Expr) instance toString AST instance toString Type instance toString Pos