GLaDOS
  • Home
  • 🌴Introduction
    • Installation
    • Basic Code example
    • Syntax Overview
  • 🤖Developpers
    • Parsing
    • Verbose Mode
  • ✨Features
    • Types
    • Operators
    • Lists
    • Includes
    • Syntactic Sugar
    • Loops
    • Conditions
    • Internal Functions
    • Recursivity
    • Prototypes
    • Error handling
    • Comments
    • Scopes
  • 📚Libraries
    • Mathematics
Powered by GitBook
On this page
  • Type instances
  • Application Parser instance:
  • Alternative Parser instance:
  • Monad Parser instance
  • Functions and Operators
  • Utilization
  • Applicative Instance Examples:
  • Alternative Instance Examples:
  • Monad Instance Examples:

Was this helpful?

Edit on GitHub
  1. Developpers

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 -> ...
PreviousSyntax OverviewNextVerbose Mode

Last updated 1 year ago

Was this helpful?

🤖