pub opaque type Lexer
pub type Position { Position(Int) }
Position(Int)
pub fn iterator(lexer: Lexer) -> Iterator(#(Token, Position))
pub fn lex(lexer: Lexer) -> List(#(Token, Position))
pub fn new(source: String) -> Lexer
pub fn next(lexer: Lexer) -> #(Lexer, #(Token, Position))