definition module AST from Data.Maybe import :: Maybe from StdOverloaded import class toString, class ==, class zero, class < :: Pos = {line :: Int, col :: Int} :: AST = AST [FunDecl] :: VarDecl = VarDecl Pos (Maybe Type) String Expr :: TVar :== String :: Type = TupleType (Type, Type) | ListType Type | IdType TVar | IntType | BoolType | CharType | VoidType | FuncType Type | (->>) 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 String [Expr] [FieldSelector] | 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] :: Stmt = IfStmt Expr [Stmt] [Stmt] | WhileStmt Expr [Stmt] | AssStmt VarDef Expr | FunStmt String [Expr] [FieldSelector] | ReturnStmt (Maybe Expr) instance toString Pos instance toString Type instance toString AST instance toString FieldSelector instance toString Op2 instance toString Expr instance toString VarDecl instance zero Pos instance == Op1 instance == Op2 instance < Op1 instance < Op2 instance == Type