+:: FunDecl = FunDecl String [String] (Maybe FunType) [VarDecl] [Stmt]
+:: FunType = FunType [Type] (Maybe Type)
+:: FunCall = FunCall String [Expr]
+:: Stmt
+ = IfStmt Expr [Stmt] [Stmt]
+ | WhileStmt Expr [Stmt]
+ | AssStmt VarDef Expr
+ | FunStmt FunCall
+ | ReturnStmt (Maybe Expr)
+
+instance toString AST
+
+parser :: LexerOutput -> ParserOutput