Parsing

This page is dedicated to the documentation of the internal code of the GoMelan parser.

Type instances

Application Parser instance:

  • Pure : takes a value and returns a parser that always succeeds with that value.

  • <*> : applies a function inside a parser to a value inside a parser.

Alternative Parser instance:

  • empty : represents a parser that always fails.

  • <|> : try the first parser and, if it fails, try the second parser.

Monad Parser instance

  • Pure : already define.

  • >>= : applies a parser to a value, then applies a function to the result.

Functions and Operators

(<?>) :: Parser a -> (Remaining -> ParseError) -> Parser a
  • Operator similar to <?> for custom error messages.

  • Add error message in stack error.

Utilization

Applicative Instance Examples:

pure

haskellCopy code-- Creating a parser that succeeds with the value 42
resultParser :: Parser Int
resultParser = pure 42

<*>

haskellCopy code-- Combining parsers to apply a function within a parser to a value within a parser
additionParser :: Parser Int
additionParser = (+) <$> parseNumber <*> parseNumber

Alternative Instance Examples:

empty

haskellCopy code-- Creating a parser that always fails
failParser :: Parser Int
failParser = empty

<|>

haskellCopy code-- Combining parsers to try one parser, and if it fails, try the second one
alternativeParser :: Parser Int
alternativeParser = successfulParser <|> failParser

Monad Instance Examples:

>>=

haskellCopy code-- Chaining parsers to apply a parser to a value, and then apply a function to the result
chainParser :: Parser Int
chainParser = parseNumber >>= \x -> parseNumber >>= \y -> return (x * y)

(<?>)

haskellCopy code-- Applying a custom error message in case of failure
customErrorParser :: Parser Int
customErrorParser = (parseNumber <?> CustomErrorFunction) >>= \x -> ...

Last updated