toTokenMap : List (Lexer, k) -> TokenMap (Token k)
- Totality: total
Visibility: export any : Lexer
Recognise any character.
/./
Totality: total
Visibility: exportopt : Lexer -> Recognise False
Recognise a lexer or recognise no input. This is not guaranteed
to consume input.
/`l`?/
Totality: total
Visibility: exportnon : Lexer -> Lexer
Recognise any character if the sub-lexer `l` fails.
/(?!`l`)./
Totality: total
Visibility: exportchoiceMap : Foldable t => (a -> Recognise c) -> t a -> Recognise c
Produce recognisers by applying a function to elements of a container, and
recognise the first match. Consumes input if the function produces consuming
recognisers. Fails if the container is empty.
Totality: total
Visibility: exportchoice : Foldable t => t (Recognise c) -> Recognise c
Recognise the first matching recogniser in a container. Consumes input if
recognisers in the list consume. Fails if the container is empty.
Totality: total
Visibility: exportconcat : (xs : List (Recognise c)) -> Recognise (isCons xs && Delay c)
Sequence a list of recognisers. Guaranteed to consume input if the list is
non-empty and the recognisers consume.
Totality: total
Visibility: exportis : Char -> Lexer
Recognise a specific character.
/[`x`]/
Totality: total
Visibility: exportisNot : Char -> Lexer
Recognise anything but the given character.
/[\^`x`]/
Totality: total
Visibility: exportlike : Char -> Lexer
Recognise a specific character (case-insensitive).
/[`x`]/i
Totality: total
Visibility: exportnotLike : Char -> Lexer
Recognise anything but the given character (case-insensitive).
/[\^`x`]/i
Totality: total
Visibility: exportexact : String -> Lexer
Recognise a specific string.
Fails if the string is empty.
/`str`/
Totality: total
Visibility: exportapprox : String -> Lexer
Recognise a specific string (case-insensitive).
Fails if the string is empty.
/`str`/i
Totality: total
Visibility: exportoneOf : String -> Lexer
Recognise any of the characters in the given string.
/[`chars`]/
Totality: total
Visibility: exportrange : Char -> Char -> Lexer
Recognise a character range. Also works in reverse!
/[`start`-`end`]/
Totality: total
Visibility: exportsome : Lexer -> Lexer
Recognise a sequence of at least one sub-lexers
/`l`+/
Totality: total
Visibility: exportmany : Lexer -> Recognise False
Recognise a sequence of at zero or more sub-lexers. This is not
guaranteed to consume input
/`l`\*/
Totality: total
Visibility: exportsomeUntil : Recognise c -> Lexer -> Lexer
Repeat the sub-lexer `l` one or more times until the lexer
`stopBefore` is encountered. `stopBefore` will not be consumed.
/((?!`stopBefore`)`l`)\+/
Totality: total
Visibility: exportmanyUntil : Recognise c -> Lexer -> Recognise False
Repeat the sub-lexer `l` zero or more times until the lexer
`stopBefore` is encountered. `stopBefore` will not be consumed.
Not guaranteed to consume input.
/((?!`stopBefore`)`l`)\*/
Totality: total
Visibility: exportmanyThen : Recognise c -> Lexer -> Recognise c
Repeat the sub-lexer `l` zero or more times until the lexer
`stopAfter` is encountered, and consume it. Guaranteed to
consume if `stopAfter` consumes.
/`l`\*?`stopAfter`/
Totality: total
Visibility: exportcount : (q : Quantity) -> Lexer -> Recognise (isSucc (min q))
Recognise a sub-lexer repeated as specified by `q`. Fails if `q` has
`min` and `max` in the wrong order. Consumes input unless `min q` is zero.
/`l`{`q`}/
Totality: total
Visibility: exportdigit : Lexer
Recognise a single digit 0-9
/[0-9]/
Totality: total
Visibility: exportdigits : Lexer
Recognise one or more digits
/[0-9]+/
Totality: total
Visibility: exportbinDigit : Lexer
Recognise a single binary digit
/[0-1]/
Totality: total
Visibility: exportbinDigits : Lexer
Recognise one or more binary digits
/[0-1]+/
Totality: total
Visibility: exporthexDigit : Lexer
Recognise a single hexidecimal digit
/[0-9A-Fa-f]/
Totality: total
Visibility: exporthexDigits : Lexer
Recognise one or more hexidecimal digits
/[0-9A-Fa-f]+/
Totality: total
Visibility: exportoctDigit : Lexer
Recognise a single octal digit
/[0-8]/
Totality: total
Visibility: exportoctDigits : Lexer
Recognise one or more octal digits
/[0-8]+/
Totality: total
Visibility: exportalpha : Lexer
Recognise a single alpha character
/[A-Za-z]/
Totality: total
Visibility: exportalphas : Lexer
Recognise one or more alpha characters
/[A-Za-z]+/
Totality: total
Visibility: exportlower : Lexer
Recognise a lowercase alpha character
/[a-z]/
Totality: total
Visibility: exportlowers : Lexer
Recognise one or more lowercase alpha characters
/[a-z]+/
Totality: total
Visibility: exportupper : Lexer
Recognise an uppercase alpha character
/[A-Z]/
Totality: total
Visibility: exportuppers : Lexer
Recognise one or more uppercase alpha characters
/[A-Z]+/
Totality: total
Visibility: exportalphaNum : Lexer
Recognise an alphanumeric character
/[A-Za-z0-9]/
Totality: total
Visibility: exportalphaNums : Lexer
Recognise one or more alphanumeric characters
/[A-Za-z0-9]+/
Totality: total
Visibility: exportspace : Lexer
Recognise a single whitespace character
/\\s/
Totality: total
Visibility: exportspaces : Lexer
Recognise one or more whitespace characters
/\\s+/
Totality: total
Visibility: exportnewline : Lexer
Recognise a single newline sequence. Understands CRLF, CR, and LF
/\\r\\n|[\\r\\n]/
Totality: total
Visibility: exportnewlines : Lexer
Recognise one or more newline sequences. Understands CRLF, CR, and LF
/(\\r\\n|[\\r\\n])+)/
Totality: total
Visibility: exportsymbol : Lexer
Recognise a single non-whitespace, non-alphanumeric character
/[\^\\sA-Za-z0-9]/
Totality: total
Visibility: exportsymbols : Lexer
Recognise one or more non-whitespace, non-alphanumeric characters
/[\^\\sA-Za-z0-9]+/
Totality: total
Visibility: exportcontrol : Lexer
- Totality: total
Visibility: export controls : Lexer
Recognise one or more control characters
/[\\x00-\\x1f\\x7f-\\x9f]+/
Totality: total
Visibility: exportsurround : Lexer -> Lexer -> Lexer -> Lexer
Recognise zero or more occurrences of a sub-lexer between
delimiting lexers
/`start`(`l`)\*?`end`/
Totality: total
Visibility: exportquote : Lexer -> Lexer -> Lexer
Recognise zero or more occurrences of a sub-lexer surrounded
by the same quote lexer on both sides (useful for strings)
/`q`(`l`)\*?`q`/
Totality: total
Visibility: exportescape : Lexer -> Lexer -> Lexer
Recognise an escape sub-lexer (often '\\') followed by
another sub-lexer
/[`esc`]`l`/
Totality: total
Visibility: exportstringLit : Lexer
Recognise a string literal, including escaped characters.
(Note: doesn't yet handle escape sequences such as \123)
/"(\\\\.|.)\*?"/
Totality: total
Visibility: exportcharLit : Lexer
Recognise a character literal, including escaped characters.
(Note: doesn't yet handle escape sequences such as \123)
/'(\\\\.|[\^'])'/
Totality: total
Visibility: exportintLit : Lexer
Recognise an integer literal (possibly with a '-' prefix)
/-?[0-9]+/
Totality: total
Visibility: exportbinLit : Lexer
Recognise a binary literal, prefixed by "0b"
/0b[0-1]+/
Totality: total
Visibility: exporthexLit : Lexer
Recognise a hexidecimal literal, prefixed by "0x" or "0X"
/0[Xx][0-9A-Fa-f]+/
Totality: total
Visibility: exportoctLit : Lexer
Recognise an octal literal, prefixed by "0o"
/0o[0-9A-Fa-f]+/
Totality: total
Visibility: exportdigitsUnderscoredLit : Lexer
- Totality: total
Visibility: export binUnderscoredLit : Lexer
- Totality: total
Visibility: export hexUnderscoredLit : Lexer
- Totality: total
Visibility: export octUnderscoredLit : Lexer
- Totality: total
Visibility: export Recognise `start`, then recognise all input until a newline is encountered,
and consume the newline. Will succeed if end-of-input is encountered before
a newline.
/`start`[\^\\r\\n]+(\\r\\n|[\\r\\n])?/
Totality: total
Visibility: export Recognise all input between `start` and `end` lexers.
Supports balanced nesting.
For block comments that don't support nesting (such as C-style comments),
use `surround`
Totality: total
Visibility: export