pipes-attoparsec-0.5.1.2: Attoparsec and Pipes integration.

Safe Haskell | None
Language | Haskell98

Pipes.Attoparsec

Contents

- Parsing
  - Including input length
- Utils
- Types

Description

`pipes` utilities for incrementally running `attoparsec`-based parsers.

This module assumes familiarity with `pipes-parse`, you can learn about it in Pipes.Parse.Tutorial.

Synopsis

- parse :: (Monad m, ParserInput a) => Parser a b -> Parser a m (Maybe (Either ParsingError b))
- parsed :: (Monad m, ParserInput a) => Parser a b -> Producer a m r -> Producer b m (Either (ParsingError, Producer a m r) r)
- parseL :: (Monad m, ParserInput a) => Parser a b -> Parser a m (Maybe (Either ParsingError (Int, b)))
- parsedL :: (Monad m, ParserInput a) => Parser a b -> Producer a m r -> Producer (Int, b) m (Either (ParsingError, Producer a m r) r)
- isEndOfParserInput :: (Monad m, ParserInput a) => Parser a m Bool
- class (Eq a, Monoid a) => ParserInput a
- data ParsingError = ParsingError {
  - peContexts :: [String]
  - peMessage :: String
  }

# Parsing

parse Source

Arguments

:: (Monad m, ParserInput a) |
=> Parser a b | Attoparsec parser
-> Parser a m (Maybe (Either ParsingError b)) | Pipes parser

Convert an `attoparsec` `Parser` to a `pipes-parse` `Parser`.

This `Parser` is compatible with the tools from Pipes.Parse.

It returns `Nothing` if the underlying `Producer` is exhausted, otherwise it attempts to run the given attoparsec `Parser` on the underlying `Producer`, possibly failing with `ParsingError`.

parsed Source

Arguments

:: (Monad m, ParserInput a) |
=> Parser a b | Attoparsec parser
-> Producer a m r | Raw input
-> Producer b m (Either (ParsingError, Producer a m r) r) |

Convert a producer of `ParserInput` to a producer of parsed values.

This producer returns `Right` when end-of-input is reached sucessfully, otherwise it returns a `ParsingError` and the leftovers including the malformed input that couldn't be parsed. You can use `errorP` to promote the `Either` return value to an `ErrorT` monad transformer.

## Including input length

Like the functions above, but these also provide information about the length of input consumed in order to fully parse each value.

parseL Source

Arguments

:: (Monad m, ParserInput a) |
=> Parser a b | Attoparsec parser
-> Parser a m (Maybe (Either ParsingError (Int, b))) | Pipes parser

Like `parse`, but also returns the length of input consumed to parse the value.

parsedL Source

Arguments

:: (Monad m, ParserInput a) |
=> Parser a b | Attoparsec parser
-> Producer a m r | Raw input
-> Producer (Int, b) m (Either (ParsingError, Producer a m r) r) |

Like `parsed`, except this tags each parsed value with the length of input consumed to parse the value.

# Utils

isEndOfParserInput :: (Monad m, ParserInput a) => Parser a m Bool Source

Like `isEndOfInput`, except that it also consumes and discards leading empty chunks.

# Types

class (Eq a, Monoid a) => ParserInput a Source

A class for valid `attoparsec` input types

Instances

ParserInput ByteString Source | Strict `ByteString`.
ParserInput Text Source | Strict `Text`.

data ParsingError Source

A parsing error report, as provided by Attoparsec's `Fail`.

Constructors

ParsingError |

Fields

peContexts :: [String]

  Contexts where the parsing error occurred.

peMessage :: String

  Parsing error description message.

Instances

Eq ParsingError Source |
Data ParsingError Source |
Read ParsingError Source |
Show ParsingError Source |
Exception ParsingError Source |
Error ParsingError Source |
Error (ParsingError, Producer a m r) Source | This instance allows using `errorP` with `parsed` and `parsedL`