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 //Two character tokens
27 | DoubleColonToken // ::
30 | GreaterEqToken // >=
32 | AmpersandsToken // &&
35 | EmptyListToken // []
36 //One character tokens
38 | BraceCloseToken // )
39 | CBraceOpenToken // {
40 | CBraceCloseToken // }
41 | SquareOpenToken // [
42 | SquareCloseToken // ]
52 | AssignmentToken // =
55 | ExclamationToken // !
57 :: LexerOutput :== Either Error [Token]
59 lexer :: [Char] -> LexerOutput