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)
type alias Point =
{ x : Float
, y : Float
}
point : Parser Point
point =
succeed Point
|. symbol "("
|. spaces
|= float
|. spaces
|. symbol ","
|. spaces
|= float
|. spaces
|. symbol ")"
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. a -> Parser a is the constructor.
For a record Point use the structur called Point .
(|=) : 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
loop : state -> (state -> Parser (Step state a)) -> Parser a
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