elm/parser
Regular expressions are quite confusing and difficult to use. This library provides a coherent alternative that handles more cases and produces clearer code.
(Readme.md from the package)
This is a summary of the talk Demystifying Parsers by Tereza Sokol.
Basics
Function | Description |
run : Parser a -> String -> Result (List DeadEnd) a | Runs the Parser on a String |
int : Parser Int | Parser for Int |
float : Parser Float | Parser for Float |
oneOf : List (Parser a) -> Parser a | Trys different Parsers. Uses the first that succeeds. Once the parser matches the first element, there is no going back! |
andThen : (a -> Parser b) -> Parser a -> Parser b | Applys the first parser and if successful applies the second. Fails if one of the parsers fails. |
Pipeline
This subject is explained at 4:48 in the Video.
Function | Description |
succeed : a -> Parser a | Starts the Pipeline. For a record |
(|=) : Parser (a -> b) -> Parser a -> Parser b | Keeps an element. |
(|.) : Parser keep -> Parser ignore -> Parser keep | Eats a character and throws it away. |
spaces : Parser () | Represents whitespace |
Strings
This subject is explained at 7:20 in the Video.
Function | Description |
chompWhile : (Char -> Bool) -> Parser () | Looks for zero or more characters that succeeds the check. Stops as soon as the check fails. |
chompIf : (Char -> Bool) -> Parser () | Reads one symbols. |
getChompedString : Parser a -> Parser String | Returnes the string that got chomped |
Loops
This subject is explained at 14:10 in the Video.
Function | Description |
Takes an initial state and a parser step and returns a parser. | |
type Step state a = Loop state | Done a | A parser step just specifies if it should continue looping or stop. |
Error messages
This subject is explained at 17:04 in the Video.
Function | Description |
problem : String -> Parser a | Returns the error message and ends the parsing. The argument is the actuall message. |
Further Reading
🎥Video: Demystifying Parsers by Tereza Sokol
📄Thread: Elm parser question
Last updated