HORIZON HASKELLDocslts/ghc-9.10.xc74966e2026-09-27Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · c74966e · 2026-09-27

Modulecabal-install-3.12.1.0Haskell2010

Distribution.Deprecated.ReadP

This is a library of parser combinators, originally written by Koen Claessen. It parses all alternatives in parallel, so it never keeps hold of the beginning of the input string, a common source of space leaks with other parsers. The (+++) choice combinator is genuinely commutative; it makes no difference which branch is "shorter".

See also Koen's paper Parallel Parsing Processes (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.9217).

This version of ReadP has been locally hacked to make it H98, by Martin Sjögren mailto:msjogren@gmail.com

The unit tests have been moved to UnitTest.Distribution.Deprecated.ReadP, by Mark Lentczner mailto:mark@glyphic.com

  • 3 types
  • 35 values

The ReadP type

1 declaration

Primitive operations

5 declarations
valueget :: ReadP r Char
#

Consumes and returns the next character. Fails if there is no input left.

valuelook :: ReadP r String
#

Look-ahead: returns the part of the input that is left, without consuming it.

value(<++) :: ReadP a a -> ReadP r a -> ReadP r a
#

Local, exclusive, left-biased choice: If left parser locally produces any result at all, then right parser is not used.

valuegather :: ReadP (String -> P Char r) a -> ReadP r (String, a)
#

Transforms a parser into one that does the same, but in addition returns the exact characters read. IMPORTANT NOTE: gather gives a runtime error if its first argument is built using any occurrences of readS_to_P.

Other operations

27 declarations
valueeof :: ReadP r ()
#

Succeeds iff we are at the end of input

valuesatisfy :: (Char -> Bool) -> ReadP r Char
#

Consumes and returns the next character, if it satisfies the specified predicate.

valuechoice :: [ReadP r a] -> ReadP r a
#

Combines all parsers in the specified list.

valuecount :: Int -> ReadP r a -> ReadP r [a]
#

count n p parses n occurrences of p in sequence. A list of results is returned.

valuebetween :: ReadP r open -> ReadP r close -> ReadP r a -> ReadP r a
#

between open close p parses open, followed by p and finally close. Only the value of p is returned.

valueoption :: a -> ReadP r a -> ReadP r a
#

option x p will either parse p or return x without consuming any input.

valueoptional :: ReadP r a -> ReadP r ()
#

optional p optionally parses p and always returns ().

valuemany :: ReadP r a -> ReadP r [a]
#

Parses zero or more occurrences of the given parser.

valuemany1 :: ReadP r a -> ReadP r [a]
#

Parses one or more occurrences of the given parser.

valuesepBy :: ReadP r a -> ReadP r sep -> ReadP r [a]
#

sepBy p sep parses zero or more occurrences of p, separated by sep. Returns a list of values returned by p.

valuesepBy1 :: ReadP r a -> ReadP r sep -> ReadP r [a]
#

sepBy1 p sep parses one or more occurrences of p, separated by sep. Returns a list of values returned by p.

valueendBy :: ReadP r a -> ReadP r sep -> ReadP r [a]
#

endBy p sep parses zero or more occurrences of p, separated and ended by sep.

valueendBy1 :: ReadP r a -> ReadP r sep -> ReadP r [a]
#

endBy p sep parses one or more occurrences of p, separated and ended by sep.

valuechainr :: ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
#

chainr p op x parses zero or more occurrences of p, separated by op. Returns a value produced by a right associative application of all functions returned by op. If there are no occurrences of p, x is returned.

valuechainl :: ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
#

chainl p op x parses zero or more occurrences of p, separated by op. Returns a value produced by a left associative application of all functions returned by op. If there are no occurrences of p, x is returned.

valuemanyTill :: ReadP r a -> ReadP [a] end -> ReadP r [a]
#

manyTill p end parses zero or more occurrences of p, until end succeeds. Returns a list of values returned by p.

Running a parser

4 declarations
typetype ReadS a = String -> [(a, String)]
#

A parser for a type a, represented as a function that takes a String and returns a list of possible parses as (a,String) pairs.

Note that this kind of backtracking parser is very inefficient; reading a large structure may be quite slow (cf ReadP).

valuereadP_to_S :: ReadP a a -> ReadS a
#

Converts a parser into a Haskell ReadS-style function. This is the main way in which you can "run" a ReadP parser: the expanded type is readP_to_S :: ReadP a -> String -> [(a,String)]

valuereadS_to_P :: ReadS a -> ReadP r a
#

Converts a Haskell ReadS-style function into a parser. Warning: This introduces local backtracking in the resulting parser, and therefore a possible inefficiency.

Internal

newtypenewtype Parser r s a
#
Instances6Monad, Functor, MonadFail, Applicative, Alternative, MonadPlus
  • Monad (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP
  • Functor (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP
  • MonadFail (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP
  • Applicative (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP
  • s ~ Char => Alternative (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP
  • s ~ Char => MonadPlus (Parser r s)Defined in cabal-install-3.12.1.0 · Distribution.Deprecated.ReadP