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) | LambdaExpr Pos [String] 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 toString FunDecl instance zero Pos instance == Op1 instance == Op2 instance < Op1 instance < Op2 instance == Type