-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Generic parser library capable of providing partial results from partial input. -- -- This package defines yet another parser library. This one is -- implemented using the concept of Brzozowski derivatives, tweaked and -- optimized to work with any monoidal input type. Lists, ByteString, and -- Text are supported out of the box, as well as any other data type for -- which the monoid-subclasses package defines instances. If the parser -- result is also a monoid, the parser can provide it incrementally, -- before the complete input is parsed. @package incremental-parser @version 0.2.3.2 -- | This module defines the AlternativeMonoid class module Control.Applicative.Monoid class Applicative f => MonoidApplicative f where >< = liftA2 mappend (><) :: (MonoidApplicative f, Monoid a) => f a -> f a -> f a class (Alternative f, MonoidApplicative f) => MonoidAlternative f where moptional x = x <|> pure mempty concatMany = fmap mconcat . many concatSome = fmap mconcat . some moptional :: (MonoidAlternative f, Monoid a) => f a -> f a concatMany :: (MonoidAlternative f, Monoid a) => f a -> f a concatSome :: (MonoidAlternative f, Monoid a) => f a -> f a -- | This module defines incremental parsers. -- -- The exported Parser type can provide partial parsing results -- from partial input, as long as the output is a Monoid. -- Construct a parser using the primitives and combinators, supply it -- with input using functions feed and feedEof, and extract -- the parsed output using results. -- -- Implementation is based on Brzozowski derivatives. module Text.ParserCombinators.Incremental -- | The central parser type. Its first parameter is the input monoid, the -- second the output. data Parser a s r -- | Feeds a chunk of the input to the parser. feed :: Monoid s => s -> Parser a s r -> Parser a s r -- | Signals the end of the input. feedEof :: Monoid s => Parser a s r -> Parser a s r -- | Like results, but more general: doesn't assume that the result -- type is a Monoid. inspect :: Parser a s r -> ([(r, s)], Maybe (Maybe (r -> r), Parser a s r)) -- | Extracts all available parsing results from a Parser. The first -- component of the result pair is a list of complete results together -- with the unconsumed remainder of the input. If the parsing can -- continue further, the second component of the pair provides the -- partial result prefix together with the parser for the rest of the -- input. results :: Monoid r => Parser a s r -> ([(r, s)], Maybe (r, Parser a s r)) -- | Like results, but returns only the complete results with the -- corresponding unconsumed inputs. completeResults :: Parser a s r -> [(r, s)] -- | Like results, but returns only the partial result prefix. resultPrefix :: Monoid r => Parser a s r -> (r, Parser a s r) failure :: Parser a s r more :: (s -> Parser a s r) -> Parser a s r -- | A parser that fails on any input and succeeds at its end. eof :: (MonoidNull s, Monoid r) => Parser a s r -- | A parser that accepts any single input atom. anyToken :: FactorialMonoid s => Parser a s s -- | A parser that accepts a specific input atom. token :: (Eq s, FactorialMonoid s) => s -> Parser a s s -- | A parser that accepts an input atom only if it satisfies the given -- predicate. satisfy :: FactorialMonoid s => (s -> Bool) -> Parser a s s -- | A parser that accepts all input. acceptAll :: Monoid s => Parser a s s -- | A parser that consumes and returns the given prefix of the input. string :: (LeftReductiveMonoid s, MonoidNull s) => s -> Parser a s s -- | A parser accepting the longest sequence of input atoms that match the -- given predicate; an optimized version of 'concatMany . satisfy'. takeWhile :: (FactorialMonoid s, MonoidNull s) => (s -> Bool) -> Parser a s s -- | A parser accepting the longest non-empty sequence of input atoms that -- match the given predicate; an optimized version of 'concatSome . -- satisfy'. takeWhile1 :: (FactorialMonoid s, MonoidNull s) => (s -> Bool) -> Parser a s s -- | Specialization of satisfy on TextualMonoid inputs, -- accepting an input character only if it satisfies the given predicate. satisfyChar :: TextualMonoid s => (Char -> Bool) -> Parser a s s -- | Specialization of takeWhile on TextualMonoid inputs, -- accepting the longest sequence of input characters that match the -- given predicate; an optimized version of 'concatMany . satisfyChar'. takeCharsWhile :: (TextualMonoid s, MonoidNull s) => (Char -> Bool) -> Parser a s s -- | Specialization of takeWhile1 on TextualMonoid inputs, -- accepting the longest non-empty sequence of input atoms that match the -- given predicate; an optimized version of 'concatSome . satisfyChar'. takeCharsWhile1 :: (TextualMonoid s, MonoidNull s) => (Char -> Bool) -> Parser a s s -- | Accepts the given number of occurrences of the argument parser. count :: (Monoid s, Monoid r) => Int -> Parser a s r -> Parser a s r -- | Discards the results of the argument parser. skip :: (Monoid s, Monoid r) => Parser a s r' -> Parser a s r -- | Like optional, but restricted to Monoid results. moptional :: (MonoidAlternative f, Monoid a) => f a -> f a -- | Zero or more argument occurrences like many, but concatenated. concatMany :: (MonoidAlternative f, Monoid a) => f a -> f a -- | One or more argument occurrences like some, but concatenated. concatSome :: (MonoidAlternative f, Monoid a) => f a -> f a -- | Repeats matching the first argument until the second one succeeds. manyTill :: (Alternative (Parser a s), Monoid s, Monoid r) => Parser a s r -> Parser a s r' -> Parser a s r mapType :: (Parser a s r -> Parser b s r) -> Parser a s r -> Parser b s r -- | Like fmap, but capable of mapping partial results, being -- restricted to Monoid types only. mapIncremental :: (Monoid s, Monoid a, Monoid b) => (a -> b) -> Parser p s a -> Parser p s b (<||>) :: Parser a s r -> Parser a s r -> Parser a s r (<<|>) :: Monoid s => Parser a s r -> Parser a s r -> Parser a s r -- | Lifted and potentially optimized monoid mappend operation from -- the parameter type. (><) :: (MonoidApplicative f, Monoid a) => f a -> f a -> f a -- | Behaves like the argument parser, but without consuming any input. lookAhead :: Monoid s => Parser a s r -> Parser a s r -- | Does not consume any input; succeeds (with mempty result) iff -- the argument parser fails. notFollowedBy :: (Monoid s, Monoid r) => Parser a s r' -> Parser a s r -- | Parallel parser conjunction: the combined parser keeps accepting input -- as long as both arguments do. and :: (Monoid s, Monoid r1, Monoid r2) => Parser a s r1 -> Parser a s r2 -> Parser a s (r1, r2) -- | A sequence parser that preserves incremental results, otherwise -- equivalent to liftA2 (,) andThen :: (Monoid s, Monoid r1, Monoid r2) => Parser a s r1 -> Parser a s r2 -> Parser a s (r1, r2) isInfallible :: Parser a s r -> Bool showWith :: (Monoid s, Monoid r, Show s) => ((s -> Parser a s r) -> String) -> (r -> String) -> Parser a s r -> String instance (Alternative (Parser a s), Monoid s) => MonoidAlternative (Parser a s) instance (Monoid s, Monoid r) => Monoid (Parser a s r) instance Monoid s => MonoidApplicative (Parser a s) instance Monoid s => Monad (Parser a s) instance Monoid s => Applicative (Parser a s) instance Monoid s => Functor (Parser a s) -- | This module defines incremental parsers. -- -- The exported Parser type can provide partial parsing results -- from partial input, as long as the output is a Monoid. -- Construct a parser using the primitives and combinators, supply it -- with input using functions feed and feedEof, and extract -- the parsed output using results. -- -- Implementation is based on Brzozowski derivatives. module Text.ParserCombinators.Incremental.LeftBiasedLocal type Parser s r = Parser LeftBiasedLocal s r -- | An empty type to specialize Parser for the left-biased -- Alternative instance. data LeftBiasedLocal leftmost :: Parser s r -> Parser a s r instance Monoid s => MonadPlus (Parser LeftBiasedLocal s) instance Monoid s => Alternative (Parser LeftBiasedLocal s) -- | This module defines incremental parsers. -- -- The exported Parser type can provide partial parsing results -- from partial input, as long as the output is a Monoid. -- Construct a parser using the primitives and combinators, supply it -- with input using functions feed and feedEof, and extract -- the parsed output using results. -- -- Implementation is based on Brzozowski derivatives. module Text.ParserCombinators.Incremental.Symmetric type Parser s r = Parser Symmetric s r -- | An empty type to specialize Parser for the symmetric -- Alternative instance. data Symmetric allOf :: Parser s r -> Parser a s r instance Monoid s => MonadPlus (Parser Symmetric s) instance Monoid s => Alternative (Parser Symmetric s)