3 from Data.Either import :: Either
4 from yard import :: Error
7 :: Token :== (Pos, TokenValue)
10 = IdentToken String // Identifier
11 | NumberToken Int // Integer
12 | CharToken Char // Character literal
13 | StringToken [Char]// String literal
15 | VarToken // var keyword
16 | ReturnToken // return keyword
17 | IfToken // if keyword
18 | ElseToken // else keyword
19 | WhileToken // while keyword
20 | TrueToken // True keyword
21 | FalseToken // False keyword
22 | VoidToken // Void keyword
23 | IntTypeToken // Int keyword
24 | CharTypeToken // Char keyword
25 | BoolTypeToken // Bool keyword
26 | LetToken // Let keyword
27 //Two character tokens
28 | DoubleColonToken // ::
31 | GreaterEqToken // >=
33 | AmpersandsToken // &&
36 | EmptyListToken // []
37 //One character tokens
39 | BraceCloseToken // )
40 | CBraceOpenToken // {
41 | CBraceCloseToken // }
42 | SquareOpenToken // [
43 | SquareCloseToken // ]
53 | AssignmentToken // =
56 | ExclamationToken // !
59 :: LexerOutput :== Either Error [Token]
61 lexer :: [Char] -> LexerOutput