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

Modulepolyparse-1.13Haskell98

Text.ParserCombinators.Poly.Parser

This module contains the definitions for a generic parser, without running state. These are the parts that are shared between the Plain and Lazy variations. Do not import this module directly, but only via T.P.Poly.Plain or T.P.Poly.Lazy.

  • 2 types
  • 6 values
  • Packagepolyparse-1.13
  • Exports8
  • LanguageHaskell98
  • LicenceLicenseRef-LGPL
  • SourceParser.hs

The Parser datatype

2 declarations
newtypenewtype Parser t a
#

This Parser datatype is a fairly generic parsing monad with error reporting. It can be used for arbitrary token types, not just String input. (If you require a running state, use module Poly.State instead)

Constructors

Instances7Monad, Functor, MonadFail, Applicative, Alternative, Commitment, …
  • Monad (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • Functor (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • MonadFail (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • Applicative (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • Alternative (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • Commitment (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
  • PolyParse (Parser t)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Parser
datadata Result z a
#

A return type like Either, that distinguishes not only between right and wrong answers, but also has commitment, so that a failure cannot be undone. This should only be used for writing very primitive parsers - really it is an internal detail of the library. The z type is the remaining unconsumed input.

Constructors

Instances1Functor
  • Functor (Result z)Defined in polyparse-1.13 · Text.ParserCombinators.Poly.Result

Basic parsers

valuenext :: Parser t t
#

Simply return the next token in the input tokenstream.

valueeof :: Parser t ()
#

Succeed if the end of file/input has been reached, fail otherwise.

valuesatisfy :: (t -> Bool) -> Parser t t
#

Return the next token if it satisfies the given predicate.

valuesatisfyMsg :: Show t => (t -> Bool) -> String -> Parser t t
#

Return the next token if it satisfies the given predicate. The String argument describes the function, for better error messages.

valueonFail :: Parser t a -> Parser t a -> Parser t a
#

p onFail q means parse p, unless p fails, in which case parse q instead. Can be chained together to give multiple attempts to parse something. (Note that q could itself be a failing parser, e.g. to change the error message from that defined in p to something different.) However, a severe failure in p cannot be ignored.

Re-parsing

valuereparse :: [t] -> Parser t ()
#

Push some tokens back onto the front of the input stream and reparse. This is useful e.g. for recursively expanding macros. When the user-parser recognises a macro use, it can lookup the macro expansion from the parse state, lex it, and then stuff the lexed expansion back down into the parser.