definition module lex from Data.Either import :: Either from yard import :: Error from AST import :: Pos :: Token :== (Pos, TokenValue) :: TokenValue //Value tokens = IdentToken String // Identifier | NumberToken Int // Integer | CharToken Char // Character literal | StringToken [Char]// String literal //Keyword tokens | VarToken // var keyword | ReturnToken // return keyword | IfToken // if keyword | ElseToken // else keyword | WhileToken // while keyword | TrueToken // True keyword | FalseToken // False keyword | VoidToken // Void keyword | IntTypeToken // Int keyword | CharTypeToken // Char keyword | BoolTypeToken // Bool keyword | LetToken // Let keyword //Two character tokens | DoubleColonToken // :: | NotEqualToken // != | LesserEqToken // <= | GreaterEqToken // >= | EqualsToken // == | AmpersandsToken // && | PipesToken // || | ArrowToken // -> | EmptyListToken // [] //One character tokens | BraceOpenToken // ( | BraceCloseToken // ) | CBraceOpenToken // { | CBraceCloseToken // } | SquareOpenToken // [ | SquareCloseToken // ] | CommaToken // , | ColonToken // : | SColonToken // ; | DotToken // . | PlusToken // + | DashToken // - | StarToken // * | SlashToken // / | PercentToken // % | AssignmentToken // = | LesserToken // < | BiggerToken // > | ExclamationToken // ! | BackslashToken // \ :: LexerOutput :== Either Error [Token] lexer :: [Char] -> LexerOutput