kmonad-0.4.2: Advanced keyboard remapping utility
Safe HaskellSafe-Inferred
LanguageHaskell2010

KMonad.Parsing

Description

A collection of general parsing definitions

Synopsis

Documentation

type Parser a = Parsec Void Text a Source #

Parsec type specified down to Void Text

type ParserT m a = ParsecT Void Text m a Source #

newtype ParseError Source #

Parsec parse errors under Void Text with an Exception instance

Instances

Instances details
Exception ParseError Source # 
Instance details

Defined in KMonad.Parsing

Show ParseError Source # 
Instance details

Defined in KMonad.Parsing

Eq ParseError Source # 
Instance details

Defined in KMonad.Parsing

sc :: Parser () Source #

Full space consumption

hsc :: Parser () Source #

Horizontal space consumption

lex :: Parser a -> Parser a Source #

Full space lexeme

hlex :: Parser a -> Parser a Source #

Horizontal space lexeme

data State s e #

This is the Megaparsec's state parametrized over stream type s and custom error component type e.

Constructors

State 

Fields

  • stateInput :: s

    The rest of input to process

  • stateOffset :: !Int

    Number of processed tokens so far

    Since: megaparsec-7.0.0

  • statePosState :: PosState s

    State that is used for line/column calculation

    Since: megaparsec-7.0.0

  • stateParseErrors :: [ParseError s e]

    Collection of “delayed” ParseErrors in reverse order. This means that the last registered error is the first element of the list.

    Since: megaparsec-8.0.0

Instances

Instances details
(Data e, Data (ParseError s e), Data s) => Data (State s e) 
Instance details

Defined in Text.Megaparsec.State

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> State s e -> c (State s e) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (State s e) #

toConstr :: State s e -> Constr #

dataTypeOf :: State s e -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (State s e)) #

dataCast2 :: Typeable t => (forall d e0. (Data d, Data e0) => c (t d e0)) -> Maybe (c (State s e)) #

gmapT :: (forall b. Data b => b -> b) -> State s e -> State s e #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> State s e -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> State s e -> r #

gmapQ :: (forall d. Data d => d -> u) -> State s e -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> State s e -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> State s e -> m (State s e) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> State s e -> m (State s e) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> State s e -> m (State s e) #

Generic (State s e) 
Instance details

Defined in Text.Megaparsec.State

Associated Types

type Rep (State s e) :: Type -> Type #

Methods

from :: State s e -> Rep (State s e) x #

to :: Rep (State s e) x -> State s e #

(Show (ParseError s e), Show s) => Show (State s e) 
Instance details

Defined in Text.Megaparsec.State

Methods

showsPrec :: Int -> State s e -> ShowS #

show :: State s e -> String #

showList :: [State s e] -> ShowS #

(NFData s, NFData (ParseError s e)) => NFData (State s e) 
Instance details

Defined in Text.Megaparsec.State

Methods

rnf :: State s e -> () #

(Eq (ParseError s e), Eq s) => Eq (State s e) 
Instance details

Defined in Text.Megaparsec.State

Methods

(==) :: State s e -> State s e -> Bool #

(/=) :: State s e -> State s e -> Bool #

type Rep (State s e) 
Instance details

Defined in Text.Megaparsec.State

type Rep (State s e) = D1 ('MetaData "State" "Text.Megaparsec.State" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'False) (C1 ('MetaCons "State" 'PrefixI 'True) ((S1 ('MetaSel ('Just "stateInput") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 s) :*: S1 ('MetaSel ('Just "stateOffset") 'SourceUnpack 'SourceStrict 'DecidedUnpack) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "statePosState") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PosState s)) :*: S1 ('MetaSel ('Just "stateParseErrors") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 [ParseError s e]))))

class (Ord (Token s), Ord (Tokens s)) => Stream s where #

Type class for inputs that can be consumed by the library.

Note that the Stream instances for Text and ByteString (strict and lazy) default to "input sharing" (see ShareInput, NoShareInput). We plan to move away from input sharing in a future major release; if you want to retain the current behaviour and are concerned with maximum performance you should consider using the ShareInput wrapper explicitly.

Note: before the version 9.0.0 the class included the methods from VisualStream and TraversableStream.

Associated Types

type Token s #

Type of token in the stream.

type Tokens s #

Type of “chunk” of the stream.

Methods

tokenToChunk :: Proxy s -> Token s -> Tokens s #

Lift a single token to chunk of the stream. The default implementation is:

tokenToChunk pxy = tokensToChunk pxy . pure

However for some types of stream there may be a more efficient way to lift.

tokensToChunk :: Proxy s -> [Token s] -> Tokens s #

The first method that establishes isomorphism between list of tokens and chunk of the stream. Valid implementation should satisfy:

chunkToTokens pxy (tokensToChunk pxy ts) == ts

chunkToTokens :: Proxy s -> Tokens s -> [Token s] #

The second method that establishes isomorphism between list of tokens and chunk of the stream. Valid implementation should satisfy:

tokensToChunk pxy (chunkToTokens pxy chunk) == chunk

chunkLength :: Proxy s -> Tokens s -> Int #

Return length of a chunk of the stream.

chunkEmpty :: Proxy s -> Tokens s -> Bool #

Check if a chunk of the stream is empty. The default implementation is in terms of the more general chunkLength:

chunkEmpty pxy ts = chunkLength pxy ts <= 0

However for many streams there may be a more efficient implementation.

take1_ :: s -> Maybe (Token s, s) #

Extract a single token form the stream. Return Nothing if the stream is empty.

takeN_ :: Int -> s -> Maybe (Tokens s, s) #

takeN_ n s should try to extract a chunk of length n, or if the stream is too short, the rest of the stream. Valid implementation should follow the rules:

  • If the requested length n is 0 (or less), Nothing should never be returned, instead Just ("", s) should be returned, where "" stands for the empty chunk, and s is the original stream (second argument).
  • If the requested length is greater than 0 and the stream is empty, Nothing should be returned indicating end of input.
  • In other cases, take chunk of length n (or shorter if the stream is not long enough) from the input stream and return the chunk along with the rest of the stream.

takeWhile_ :: (Token s -> Bool) -> s -> (Tokens s, s) #

Extract chunk of the stream taking tokens while the supplied predicate returns True. Return the chunk and the rest of the stream.

For many types of streams, the method allows for significant performance improvements, although it is not strictly necessary from conceptual point of view.

Instances

Instances details
Stream ByteString 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token ByteString #

type Tokens ByteString #

Stream ByteString 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token ByteString #

type Tokens ByteString #

Stream Text 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token Text #

type Tokens Text #

Stream Text 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token Text #

type Tokens Text #

Ord a => Stream (Seq a)

Since: megaparsec-9.0.0

Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (Seq a) #

type Tokens (Seq a) #

Methods

tokenToChunk :: Proxy (Seq a) -> Token (Seq a) -> Tokens (Seq a) #

tokensToChunk :: Proxy (Seq a) -> [Token (Seq a)] -> Tokens (Seq a) #

chunkToTokens :: Proxy (Seq a) -> Tokens (Seq a) -> [Token (Seq a)] #

chunkLength :: Proxy (Seq a) -> Tokens (Seq a) -> Int #

chunkEmpty :: Proxy (Seq a) -> Tokens (Seq a) -> Bool #

take1_ :: Seq a -> Maybe (Token (Seq a), Seq a) #

takeN_ :: Int -> Seq a -> Maybe (Tokens (Seq a), Seq a) #

takeWhile_ :: (Token (Seq a) -> Bool) -> Seq a -> (Tokens (Seq a), Seq a) #

Stream (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Stream (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Stream (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (NoShareInput Text) #

type Tokens (NoShareInput Text) #

Stream (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (NoShareInput Text) #

type Tokens (NoShareInput Text) #

Stream (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput ByteString) #

type Tokens (ShareInput ByteString) #

Stream (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput ByteString) #

type Tokens (ShareInput ByteString) #

Stream (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput Text) #

type Tokens (ShareInput Text) #

Stream (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput Text) #

type Tokens (ShareInput Text) #

Ord a => Stream [a]

Since: megaparsec-9.0.0

Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token [a] #

type Tokens [a] #

Methods

tokenToChunk :: Proxy [a] -> Token [a] -> Tokens [a] #

tokensToChunk :: Proxy [a] -> [Token [a]] -> Tokens [a] #

chunkToTokens :: Proxy [a] -> Tokens [a] -> [Token [a]] #

chunkLength :: Proxy [a] -> Tokens [a] -> Int #

chunkEmpty :: Proxy [a] -> Tokens [a] -> Bool #

take1_ :: [a] -> Maybe (Token [a], [a]) #

takeN_ :: Int -> [a] -> Maybe (Tokens [a], [a]) #

takeWhile_ :: (Token [a] -> Bool) -> [a] -> (Tokens [a], [a]) #

data SourcePos #

The data type SourcePos represents source positions. It contains the name of the source file, a line number, and a column number. Source line and column positions change intensively during parsing, so we need to make them strict to avoid memory leaks.

Constructors

SourcePos 

Fields

Instances

Instances details
Data SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> SourcePos -> c SourcePos #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c SourcePos #

toConstr :: SourcePos -> Constr #

dataTypeOf :: SourcePos -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c SourcePos) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c SourcePos) #

gmapT :: (forall b. Data b => b -> b) -> SourcePos -> SourcePos #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> SourcePos -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> SourcePos -> r #

gmapQ :: (forall d. Data d => d -> u) -> SourcePos -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> SourcePos -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> SourcePos -> m SourcePos #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> SourcePos -> m SourcePos #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> SourcePos -> m SourcePos #

Generic SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

Associated Types

type Rep SourcePos :: Type -> Type #

Read SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

Show SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

NFData SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

rnf :: SourcePos -> () #

Eq SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

Ord SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

type Rep SourcePos 
Instance details

Defined in Text.Megaparsec.Pos

type Rep SourcePos = D1 ('MetaData "SourcePos" "Text.Megaparsec.Pos" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'False) (C1 ('MetaCons "SourcePos" 'PrefixI 'True) (S1 ('MetaSel ('Just "sourceName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 FilePath) :*: (S1 ('MetaSel ('Just "sourceLine") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Pos) :*: S1 ('MetaSel ('Just "sourceColumn") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Pos))))

newtype InvalidPosException #

The exception is thrown by mkPos when its argument is not a positive number.

Since: megaparsec-5.0.0

Constructors

InvalidPosException Int

Contains the actual value that was passed to mkPos

Instances

Instances details
Data InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> InvalidPosException -> c InvalidPosException #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c InvalidPosException #

toConstr :: InvalidPosException -> Constr #

dataTypeOf :: InvalidPosException -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c InvalidPosException) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c InvalidPosException) #

gmapT :: (forall b. Data b => b -> b) -> InvalidPosException -> InvalidPosException #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> InvalidPosException -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> InvalidPosException -> r #

gmapQ :: (forall d. Data d => d -> u) -> InvalidPosException -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> InvalidPosException -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> InvalidPosException -> m InvalidPosException #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> InvalidPosException -> m InvalidPosException #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> InvalidPosException -> m InvalidPosException #

Exception InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

Generic InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

Associated Types

type Rep InvalidPosException :: Type -> Type #

Show InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

NFData InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

Methods

rnf :: InvalidPosException -> () #

Eq InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

type Rep InvalidPosException 
Instance details

Defined in Text.Megaparsec.Pos

type Rep InvalidPosException = D1 ('MetaData "InvalidPosException" "Text.Megaparsec.Pos" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'True) (C1 ('MetaCons "InvalidPosException" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

data Pos #

Pos is the type for positive integers. This is used to represent line number, column number, and similar things like indentation level. Semigroup instance can be used to safely and efficiently add Poses together.

Since: megaparsec-5.0.0

Instances

Instances details
Data Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Pos -> c Pos #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Pos #

toConstr :: Pos -> Constr #

dataTypeOf :: Pos -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Pos) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Pos) #

gmapT :: (forall b. Data b => b -> b) -> Pos -> Pos #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Pos -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Pos -> r #

gmapQ :: (forall d. Data d => d -> u) -> Pos -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Pos -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Pos -> m Pos #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Pos -> m Pos #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Pos -> m Pos #

Semigroup Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

(<>) :: Pos -> Pos -> Pos #

sconcat :: NonEmpty Pos -> Pos #

stimes :: Integral b => b -> Pos -> Pos #

Generic Pos 
Instance details

Defined in Text.Megaparsec.Pos

Associated Types

type Rep Pos :: Type -> Type #

Methods

from :: Pos -> Rep Pos x #

to :: Rep Pos x -> Pos #

Read Pos 
Instance details

Defined in Text.Megaparsec.Pos

Show Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

showsPrec :: Int -> Pos -> ShowS #

show :: Pos -> String #

showList :: [Pos] -> ShowS #

NFData Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

rnf :: Pos -> () #

Eq Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

(==) :: Pos -> Pos -> Bool #

(/=) :: Pos -> Pos -> Bool #

Ord Pos 
Instance details

Defined in Text.Megaparsec.Pos

Methods

compare :: Pos -> Pos -> Ordering #

(<) :: Pos -> Pos -> Bool #

(<=) :: Pos -> Pos -> Bool #

(>) :: Pos -> Pos -> Bool #

(>=) :: Pos -> Pos -> Bool #

max :: Pos -> Pos -> Pos #

min :: Pos -> Pos -> Pos #

type Rep Pos 
Instance details

Defined in Text.Megaparsec.Pos

type Rep Pos = D1 ('MetaData "Pos" "Text.Megaparsec.Pos" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'True) (C1 ('MetaCons "Pos" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

data PosState s #

A special kind of state that is used to calculate line/column positions on demand.

Since: megaparsec-7.0.0

Constructors

PosState 

Fields

Instances

Instances details
Data s => Data (PosState s) 
Instance details

Defined in Text.Megaparsec.State

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> PosState s -> c (PosState s) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (PosState s) #

toConstr :: PosState s -> Constr #

dataTypeOf :: PosState s -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (PosState s)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (PosState s)) #

gmapT :: (forall b. Data b => b -> b) -> PosState s -> PosState s #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> PosState s -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> PosState s -> r #

gmapQ :: (forall d. Data d => d -> u) -> PosState s -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> PosState s -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> PosState s -> m (PosState s) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> PosState s -> m (PosState s) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> PosState s -> m (PosState s) #

Generic (PosState s) 
Instance details

Defined in Text.Megaparsec.State

Associated Types

type Rep (PosState s) :: Type -> Type #

Methods

from :: PosState s -> Rep (PosState s) x #

to :: Rep (PosState s) x -> PosState s #

Show s => Show (PosState s) 
Instance details

Defined in Text.Megaparsec.State

Methods

showsPrec :: Int -> PosState s -> ShowS #

show :: PosState s -> String #

showList :: [PosState s] -> ShowS #

NFData s => NFData (PosState s) 
Instance details

Defined in Text.Megaparsec.State

Methods

rnf :: PosState s -> () #

Eq s => Eq (PosState s) 
Instance details

Defined in Text.Megaparsec.State

Methods

(==) :: PosState s -> PosState s -> Bool #

(/=) :: PosState s -> PosState s -> Bool #

type Rep (PosState s) 
Instance details

Defined in Text.Megaparsec.State

type Rep (PosState s) = D1 ('MetaData "PosState" "Text.Megaparsec.State" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'False) (C1 ('MetaCons "PosState" 'PrefixI 'True) ((S1 ('MetaSel ('Just "pstateInput") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 s) :*: S1 ('MetaSel ('Just "pstateOffset") 'NoSourceUnpackedness 'SourceStrict 'DecidedUnpack) (Rec0 Int)) :*: (S1 ('MetaSel ('Just "pstateSourcePos") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 SourcePos) :*: (S1 ('MetaSel ('Just "pstateTabWidth") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Pos) :*: S1 ('MetaSel ('Just "pstateLinePrefix") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 String)))))

class Stream s => TraversableStream s where #

Type class for inputs that can also be used for error reporting.

Since: megaparsec-9.0.0

Minimal complete definition

reachOffset | reachOffsetNoLine

Methods

reachOffset #

Arguments

:: Int

Offset to reach

-> PosState s

Initial PosState to use

-> (Maybe String, PosState s)

See the description of the function

Given an offset o and initial PosState, adjust the state in such a way that it starts at the offset.

Return two values (in order):

  • Maybe String representing the line on which the given offset o is located. It can be omitted (i.e. Nothing); in that case error reporting functions will not show offending lines. If returned, the line should satisfy a number of conditions that are described below.
  • The updated PosState which can be in turn used to locate another offset o' given that o' >= o.

The String representing the offending line in input stream should satisfy the following:

  • It should adequately represent location of token at the offset of interest, that is, character at sourceColumn of the returned SourcePos should correspond to the token at the offset o.
  • It should not include the newline at the end.
  • It should not be empty, if the line happens to be empty, it should be replaced with the string "<empty line>".
  • Tab characters should be replaced by appropriate number of spaces, which is determined by the pstateTabWidth field of PosState.

Note: type signature of the function was changed in the version 9.0.0.

Since: megaparsec-7.0.0

reachOffsetNoLine #

Arguments

:: Int

Offset to reach

-> PosState s

Initial PosState to use

-> PosState s

Reached source position and updated state

A version of reachOffset that may be faster because it doesn't need to fetch the line at which the given offset in located.

The default implementation is this:

reachOffsetNoLine o pst =
  snd (reachOffset o pst)

Note: type signature of the function was changed in the version 8.0.0.

Since: megaparsec-7.0.0

class Stream s => VisualStream s where #

Type class for inputs that can also be used for debugging.

Since: megaparsec-9.0.0

Minimal complete definition

showTokens

Methods

showTokens :: Proxy s -> NonEmpty (Token s) -> String #

Pretty-print non-empty stream of tokens. This function is also used to print single tokens (represented as singleton lists).

Since: megaparsec-7.0.0

tokensLength :: Proxy s -> NonEmpty (Token s) -> Int #

Return the number of characters that a non-empty stream of tokens spans. The default implementation is sufficient if every token spans exactly 1 character.

Since: megaparsec-8.0.0

newtype NoShareInput a #

This wrapper selects the no-input-sharing Stream implementation for Text (Text) and ByteString (ByteString). This means that our parsers will create independent copies rather than using slices of the input. See also the documentation of copy.

More importantly, any parser output will be independent of the input, and holding on to parts of the output will never prevent the input from being garbage collected.

For maximum performance you might consider using ShareInput instead, but beware of its pitfalls!

Since: megaparsec-9.3.0

Constructors

NoShareInput 

Fields

Instances

Instances details
Stream (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Stream (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Stream (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (NoShareInput Text) #

type Tokens (NoShareInput Text) #

Stream (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (NoShareInput Text) #

type Tokens (NoShareInput Text) #

type Token (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

newtype ShareInput a #

This wrapper selects the input-sharing Stream implementation for Text (Text) and ByteString (ByteString). By input sharing we mean that our parsers will use slices whenever possible to avoid having to copy parts of the input. See also the documentation of split.

Note that using slices is in general faster than copying; on the other hand it also has the potential for causing surprising memory leaks: if any slice of the input survives in the output, holding on to the output will force the entire input Text/ByteString to stay in memory! Even when using lazy Text/ByteString we will hold on to whole chunks at a time leading to to significantly worse memory residency in some cases.

See NoShareInput for a somewhat slower implementation that avoids this memory leak scenario.

Since: megaparsec-9.3.0

Constructors

ShareInput 

Fields

Instances

Instances details
Stream (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput ByteString) #

type Tokens (ShareInput ByteString) #

Stream (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput ByteString) #

type Tokens (ShareInput ByteString) #

Stream (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput Text) #

type Tokens (ShareInput Text) #

Stream (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

Associated Types

type Token (ShareInput Text) #

type Tokens (ShareInput Text) #

type Token (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type family Token s #

Type of token in the stream.

Instances

Instances details
type Token ByteString 
Instance details

Defined in Text.Megaparsec.Stream

type Token ByteString 
Instance details

Defined in Text.Megaparsec.Stream

type Token Text 
Instance details

Defined in Text.Megaparsec.Stream

type Token Text 
Instance details

Defined in Text.Megaparsec.Stream

type Token (Seq a) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (Seq a) = a
type Token (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Token [a] 
Instance details

Defined in Text.Megaparsec.Stream

type Token [a] = a

type family Tokens s #

Type of “chunk” of the stream.

Instances

Instances details
type Tokens ByteString 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens ByteString 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens Text 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens Text 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (Seq a) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (Seq a) = Seq a
type Tokens (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (NoShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput ByteString) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens (ShareInput Text) 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens [a] 
Instance details

Defined in Text.Megaparsec.Stream

type Tokens [a] = [a]

class Ord a => ShowErrorComponent a where #

The type class defines how to print a custom component of ParseError.

Since: megaparsec-5.0.0

Minimal complete definition

showErrorComponent

Methods

showErrorComponent :: a -> String #

Pretty-print a component of ParseError.

errorComponentLen :: a -> Int #

Length of the error component in characters, used for highlighting of parse errors in input string.

Since: megaparsec-7.0.0

Instances

Instances details
ShowErrorComponent Void 
Instance details

Defined in Text.Megaparsec.Error

data ParseErrorBundle s e #

A non-empty collection of ParseErrors equipped with PosState that allows us to pretty-print the errors efficiently and correctly.

Since: megaparsec-7.0.0

Constructors

ParseErrorBundle 

Fields

Instances

Instances details
(Data s, Data (Token s), Ord (Token s), Data e, Ord e) => Data (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ParseErrorBundle s e -> c (ParseErrorBundle s e) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ParseErrorBundle s e) #

toConstr :: ParseErrorBundle s e -> Constr #

dataTypeOf :: ParseErrorBundle s e -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ParseErrorBundle s e)) #

dataCast2 :: Typeable t => (forall d e0. (Data d, Data e0) => c (t d e0)) -> Maybe (c (ParseErrorBundle s e)) #

gmapT :: (forall b. Data b => b -> b) -> ParseErrorBundle s e -> ParseErrorBundle s e #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ParseErrorBundle s e -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ParseErrorBundle s e -> r #

gmapQ :: (forall d. Data d => d -> u) -> ParseErrorBundle s e -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ParseErrorBundle s e -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ParseErrorBundle s e -> m (ParseErrorBundle s e) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseErrorBundle s e -> m (ParseErrorBundle s e) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ParseErrorBundle s e -> m (ParseErrorBundle s e) #

(Show s, Show (Token s), Show e, ShowErrorComponent e, VisualStream s, TraversableStream s, Typeable s, Typeable e) => Exception (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

Generic (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

Associated Types

type Rep (ParseErrorBundle s e) :: Type -> Type #

(Show s, Show (Token s), Show e) => Show (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

(NFData s, NFData (Token s), NFData e) => NFData (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

Methods

rnf :: ParseErrorBundle s e -> () #

(Eq s, Eq (Token s), Eq e) => Eq (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

type Rep (ParseErrorBundle s e) 
Instance details

Defined in Text.Megaparsec.Error

type Rep (ParseErrorBundle s e) = D1 ('MetaData "ParseErrorBundle" "Text.Megaparsec.Error" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'False) (C1 ('MetaCons "ParseErrorBundle" 'PrefixI 'True) (S1 ('MetaSel ('Just "bundleErrors") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty (ParseError s e))) :*: S1 ('MetaSel ('Just "bundlePosState") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (PosState s))))

data ErrorFancy e #

Additional error data, extendable by user. When no custom data is necessary, the type is typically indexed by Void to “cancel” the ErrorCustom constructor.

Since: megaparsec-6.0.0

Constructors

ErrorFail String

fail has been used in parser monad

ErrorIndentation Ordering Pos Pos

Incorrect indentation error: desired ordering between reference level and actual level, reference indentation level, actual indentation level

ErrorCustom e

Custom error data

Instances

Instances details
Functor ErrorFancy 
Instance details

Defined in Text.Megaparsec.Error

Methods

fmap :: (a -> b) -> ErrorFancy a -> ErrorFancy b #

(<$) :: a -> ErrorFancy b -> ErrorFancy a #

Data e => Data (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ErrorFancy e -> c (ErrorFancy e) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ErrorFancy e) #

toConstr :: ErrorFancy e -> Constr #

dataTypeOf :: ErrorFancy e -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (ErrorFancy e)) #

dataCast2 :: Typeable t => (forall d e0. (Data d, Data e0) => c (t d e0)) -> Maybe (c (ErrorFancy e)) #

gmapT :: (forall b. Data b => b -> b) -> ErrorFancy e -> ErrorFancy e #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ErrorFancy e -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ErrorFancy e -> r #

gmapQ :: (forall d. Data d => d -> u) -> ErrorFancy e -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ErrorFancy e -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ErrorFancy e -> m (ErrorFancy e) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ErrorFancy e -> m (ErrorFancy e) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ErrorFancy e -> m (ErrorFancy e) #

Generic (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

Associated Types

type Rep (ErrorFancy e) :: Type -> Type #

Methods

from :: ErrorFancy e -> Rep (ErrorFancy e) x #

to :: Rep (ErrorFancy e) x -> ErrorFancy e #

Read e => Read (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

Show e => Show (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

NFData a => NFData (ErrorFancy a) 
Instance details

Defined in Text.Megaparsec.Error

Methods

rnf :: ErrorFancy a -> () #

Eq e => Eq (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

Methods

(==) :: ErrorFancy e -> ErrorFancy e -> Bool #

(/=) :: ErrorFancy e -> ErrorFancy e -> Bool #

Ord e => Ord (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

type Rep (ErrorFancy e) 
Instance details

Defined in Text.Megaparsec.Error

data ErrorItem t #

A data type that is used to represent “unexpected/expected” items in ParseError. It is parametrized over the token type t.

Since: megaparsec-5.0.0

Constructors

Tokens (NonEmpty t)

Non-empty stream of tokens

Label (NonEmpty Char)

Label (cannot be empty)

EndOfInput

End of input

Instances

Instances details
Functor ErrorItem 
Instance details

Defined in Text.Megaparsec.Error

Methods

fmap :: (a -> b) -> ErrorItem a -> ErrorItem b #

(<$) :: a -> ErrorItem b -> ErrorItem a #

Data t => Data (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> ErrorItem t -> c (ErrorItem t) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (ErrorItem t) #

toConstr :: ErrorItem t -> Constr #

dataTypeOf :: ErrorItem t -> DataType #

dataCast1 :: Typeable t0 => (forall d. Data d => c (t0 d)) -> Maybe (c (ErrorItem t)) #

dataCast2 :: Typeable t0 => (forall d e. (Data d, Data e) => c (t0 d e)) -> Maybe (c (ErrorItem t)) #

gmapT :: (forall b. Data b => b -> b) -> ErrorItem t -> ErrorItem t #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> ErrorItem t -> r #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> ErrorItem t -> r #

gmapQ :: (forall d. Data d => d -> u) -> ErrorItem t -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> ErrorItem t -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> ErrorItem t -> m (ErrorItem t) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> ErrorItem t -> m (ErrorItem t) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> ErrorItem t -> m (ErrorItem t) #

Generic (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

Associated Types

type Rep (ErrorItem t) :: Type -> Type #

Methods

from :: ErrorItem t -> Rep (ErrorItem t) x #

to :: Rep (ErrorItem t) x -> ErrorItem t #

Read t => Read (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

Show t => Show (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

NFData t => NFData (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

Methods

rnf :: ErrorItem t -> () #

Eq t => Eq (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

Methods

(==) :: ErrorItem t -> ErrorItem t -> Bool #

(/=) :: ErrorItem t -> ErrorItem t -> Bool #

Ord t => Ord (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

type Rep (ErrorItem t) 
Instance details

Defined in Text.Megaparsec.Error

type Rep (ErrorItem t) = D1 ('MetaData "ErrorItem" "Text.Megaparsec.Error" "megaparsec-9.5.0-4382cc5a8aa3d0b27e8548a7f445a63247e37f4341e88c836fd32297676763ff" 'False) (C1 ('MetaCons "Tokens" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty t))) :+: (C1 ('MetaCons "Label" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (NonEmpty Char))) :+: C1 ('MetaCons "EndOfInput" 'PrefixI 'False) (U1 :: Type -> Type)))

class (Stream s, MonadPlus m) => MonadParsec e s (m :: Type -> Type) | m -> e s where #

Type class describing monads that implement the full set of primitive parsers.

Note that the following primitives are “fast” and should be taken advantage of as much as possible if your aim is a fast parser: tokens, takeWhileP, takeWhile1P, and takeP.

Methods

parseError :: ParseError s e -> m a #

Stop parsing and report the ParseError. This is the only way to control position of the error without manipulating the parser state manually.

Since: megaparsec-8.0.0

label :: String -> m a -> m a #

The parser label name p behaves as parser p, but whenever the parser p fails without consuming any input, it replaces names of “expected” tokens with the name name.

hidden :: m a -> m a #

hidden p behaves just like parser p, but it doesn't show any “expected” tokens in error message when p fails.

Please use hidden instead of the old label "" idiom.

try :: m a -> m a #

The parser try p behaves like the parser p, except that it backtracks the parser state when p fails (either consuming input or not).

This combinator is used whenever arbitrary look ahead is needed. Since it pretends that it hasn't consumed any input when p fails, the (<|>) combinator will try its second alternative even if the first parser failed while consuming input.

For example, here is a parser that is supposed to parse the word “let” or the word “lexical”:

>>> parseTest (string "let" <|> string "lexical") "lexical"
1:1:
unexpected "lex"
expecting "let"

What happens here? The first parser consumes “le” and fails (because it doesn't see a “t”). The second parser, however, isn't tried, since the first parser has already consumed some input! try fixes this behavior and allows backtracking to work:

>>> parseTest (try (string "let") <|> string "lexical") "lexical"
"lexical"

try also improves error messages in case of overlapping alternatives, because Megaparsec's hint system can be used:

>>> parseTest (try (string "let") <|> string "lexical") "le"
1:1:
unexpected "le"
expecting "let" or "lexical"

Note that as of Megaparsec 4.4.0, string backtracks automatically (see tokens), so it does not need try. However, the examples above demonstrate the idea behind try so well that it was decided to keep them. You still need to use try when your alternatives are complex, composite parsers.

lookAhead :: m a -> m a #

If p in lookAhead p succeeds (either consuming input or not) the whole parser behaves like p succeeded without consuming anything (parser state is not updated as well). If p fails, lookAhead has no effect, i.e. it will fail consuming input if p fails consuming input. Combine with try if this is undesirable.

notFollowedBy :: m a -> m () #

notFollowedBy p only succeeds when the parser p fails. This parser never consumes any input and never modifies parser state. It can be used to implement the “longest match” rule.

withRecovery #

Arguments

:: (ParseError s e -> m a)

How to recover from failure

-> m a

Original parser

-> m a

Parser that can recover from failures

withRecovery r p allows us to continue parsing even if the parser p fails. In this case r is called with the actual ParseError as its argument. Typical usage is to return a value signifying failure to parse this particular object and to consume some part of the input up to the point where the next object starts.

Note that if r fails, the original error message is reported as if without withRecovery. In no way recovering parser r can influence error messages.

Since: megaparsec-4.4.0

observing #

Arguments

:: m a

The parser to run

-> m (Either (ParseError s e) a) 

observing p allows us to “observe” failure of the p parser, should it happen, without actually ending parsing but instead getting the ParseError in Left. On success parsed value is returned in Right as usual. Note that this primitive just allows you to observe parse errors as they happen, it does not backtrack or change how the p parser works in any way.

Since: megaparsec-5.1.0

eof :: m () #

This parser only succeeds at the end of input.

token #

Arguments

:: (Token s -> Maybe a)

Matching function for the token to parse

-> Set (ErrorItem (Token s))

Used in the error message to mention the items that were expected

-> m a 

The parser token test expected accepts tokens for which the matching function test returns Just results. If Nothing is returned the expected set is used to report the items that were expected.

For example, the satisfy parser is implemented as:

satisfy f = token testToken Set.empty
  where
    testToken x = if f x then Just x else Nothing

Note: type signature of this primitive was changed in the version 7.0.0.

tokens #

Arguments

:: (Tokens s -> Tokens s -> Bool)

Predicate to check equality of chunks

-> Tokens s

Chunk of input to match against

-> m (Tokens s) 

The parser tokens test chk parses a chunk of input chk and returns it. The supplied predicate test is used to check equality of given and parsed chunks after a candidate chunk of correct length is fetched from the stream.

This can be used for example to write chunk:

chunk = tokens (==)

Note that beginning from Megaparsec 4.4.0, this is an auto-backtracking primitive, which means that if it fails, it never consumes any input. This is done to make its consumption model match how error messages for this primitive are reported (which becomes an important thing as user gets more control with primitives like withRecovery):

>>> parseTest (string "abc") "abd"
1:1:
unexpected "abd"
expecting "abc"

This means, in particular, that it's no longer necessary to use try with tokens-based parsers, such as string and string'. This feature does not affect performance in any way.

takeWhileP #

Arguments

:: Maybe String

Name for a single token in the row

-> (Token s -> Bool)

Predicate to use to test tokens

-> m (Tokens s)

A chunk of matching tokens

Parse zero or more tokens for which the supplied predicate holds. Try to use this as much as possible because for many streams this combinator is much faster than parsers built with many and satisfy.

takeWhileP (Just "foo") f = many (satisfy f <?> "foo")
takeWhileP Nothing      f = many (satisfy f)

The combinator never fails, although it may parse the empty chunk.

Since: megaparsec-6.0.0

takeWhile1P #

Arguments

:: Maybe String

Name for a single token in the row

-> (Token s -> Bool)

Predicate to use to test tokens

-> m (Tokens s)

A chunk of matching tokens

Similar to takeWhileP, but fails if it can't parse at least one token. Try to use this as much as possible because for many streams this combinator is much faster than parsers built with some and satisfy.

takeWhile1P (Just "foo") f = some (satisfy f <?> "foo")
takeWhile1P Nothing      f = some (satisfy f)

Note that the combinator either succeeds or fails without consuming any input, so try is not necessary with it.

Since: megaparsec-6.0.0

takeP #

Arguments

:: Maybe String

Name for a single token in the row

-> Int

How many tokens to extract

-> m (Tokens s)

A chunk of matching tokens

Extract the specified number of tokens from the input stream and return them packed as a chunk of stream. If there is not enough tokens in the stream, a parse error will be signaled. It's guaranteed that if the parser succeeds, the requested number of tokens will be returned.

The parser is roughly equivalent to:

takeP (Just "foo") n = count n (anySingle <?> "foo")
takeP Nothing      n = count n anySingle

Note that if the combinator fails due to insufficient number of tokens in the input stream, it backtracks automatically. No try is necessary with takeP.

Since: megaparsec-6.0.0

getParserState :: m (State s e) #

Return the full parser state as a State record.

updateParserState :: (State s e -> State s e) -> m () #

updateParserState f applies the function f to the parser state.

mkParsec :: (State s e -> Reply e s a) -> m a #

An escape hatch for defining custom MonadParsec primitives. You will need to import Text.Megaparsec.Internal in order to construct Reply.

Since: megaparsec-9.4.0

Instances

Instances details
MonadParsec e s m => MonadParsec e s (IdentityT m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> IdentityT m a #

label :: String -> IdentityT m a -> IdentityT m a #

hidden :: IdentityT m a -> IdentityT m a #

try :: IdentityT m a -> IdentityT m a #

lookAhead :: IdentityT m a -> IdentityT m a #

notFollowedBy :: IdentityT m a -> IdentityT m () #

withRecovery :: (ParseError s e -> IdentityT m a) -> IdentityT m a -> IdentityT m a #

observing :: IdentityT m a -> IdentityT m (Either (ParseError s e) a) #

eof :: IdentityT m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> IdentityT m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> IdentityT m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> IdentityT m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> IdentityT m (Tokens s) #

takeP :: Maybe String -> Int -> IdentityT m (Tokens s) #

getParserState :: IdentityT m (State s e) #

updateParserState :: (State s e -> State s e) -> IdentityT m () #

mkParsec :: (State s e -> Reply e s a) -> IdentityT m a #

MonadParsec e s m => MonadParsec e s (ReaderT r m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> ReaderT r m a #

label :: String -> ReaderT r m a -> ReaderT r m a #

hidden :: ReaderT r m a -> ReaderT r m a #

try :: ReaderT r m a -> ReaderT r m a #

lookAhead :: ReaderT r m a -> ReaderT r m a #

notFollowedBy :: ReaderT r m a -> ReaderT r m () #

withRecovery :: (ParseError s e -> ReaderT r m a) -> ReaderT r m a -> ReaderT r m a #

observing :: ReaderT r m a -> ReaderT r m (Either (ParseError s e) a) #

eof :: ReaderT r m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> ReaderT r m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> ReaderT r m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> ReaderT r m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> ReaderT r m (Tokens s) #

takeP :: Maybe String -> Int -> ReaderT r m (Tokens s) #

getParserState :: ReaderT r m (State s e) #

updateParserState :: (State s e -> State s e) -> ReaderT r m () #

mkParsec :: (State s e -> Reply e s a) -> ReaderT r m a #

MonadParsec e s m => MonadParsec e s (StateT st m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> StateT st m a #

label :: String -> StateT st m a -> StateT st m a #

hidden :: StateT st m a -> StateT st m a #

try :: StateT st m a -> StateT st m a #

lookAhead :: StateT st m a -> StateT st m a #

notFollowedBy :: StateT st m a -> StateT st m () #

withRecovery :: (ParseError s e -> StateT st m a) -> StateT st m a -> StateT st m a #

observing :: StateT st m a -> StateT st m (Either (ParseError s e) a) #

eof :: StateT st m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> StateT st m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> StateT st m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> StateT st m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> StateT st m (Tokens s) #

takeP :: Maybe String -> Int -> StateT st m (Tokens s) #

getParserState :: StateT st m (State s e) #

updateParserState :: (State s e -> State s e) -> StateT st m () #

mkParsec :: (State s e -> Reply e s a) -> StateT st m a #

MonadParsec e s m => MonadParsec e s (StateT st m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> StateT st m a #

label :: String -> StateT st m a -> StateT st m a #

hidden :: StateT st m a -> StateT st m a #

try :: StateT st m a -> StateT st m a #

lookAhead :: StateT st m a -> StateT st m a #

notFollowedBy :: StateT st m a -> StateT st m () #

withRecovery :: (ParseError s e -> StateT st m a) -> StateT st m a -> StateT st m a #

observing :: StateT st m a -> StateT st m (Either (ParseError s e) a) #

eof :: StateT st m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> StateT st m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> StateT st m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> StateT st m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> StateT st m (Tokens s) #

takeP :: Maybe String -> Int -> StateT st m (Tokens s) #

getParserState :: StateT st m (State s e) #

updateParserState :: (State s e -> State s e) -> StateT st m () #

mkParsec :: (State s e -> Reply e s a) -> StateT st m a #

(Monoid w, MonadParsec e s m) => MonadParsec e s (WriterT w m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> WriterT w m a #

label :: String -> WriterT w m a -> WriterT w m a #

hidden :: WriterT w m a -> WriterT w m a #

try :: WriterT w m a -> WriterT w m a #

lookAhead :: WriterT w m a -> WriterT w m a #

notFollowedBy :: WriterT w m a -> WriterT w m () #

withRecovery :: (ParseError s e -> WriterT w m a) -> WriterT w m a -> WriterT w m a #

observing :: WriterT w m a -> WriterT w m (Either (ParseError s e) a) #

eof :: WriterT w m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> WriterT w m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> WriterT w m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> WriterT w m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> WriterT w m (Tokens s) #

takeP :: Maybe String -> Int -> WriterT w m (Tokens s) #

getParserState :: WriterT w m (State s e) #

updateParserState :: (State s e -> State s e) -> WriterT w m () #

mkParsec :: (State s e -> Reply e s a) -> WriterT w m a #

(Monoid w, MonadParsec e s m) => MonadParsec e s (WriterT w m) 
Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> WriterT w m a #

label :: String -> WriterT w m a -> WriterT w m a #

hidden :: WriterT w m a -> WriterT w m a #

try :: WriterT w m a -> WriterT w m a #

lookAhead :: WriterT w m a -> WriterT w m a #

notFollowedBy :: WriterT w m a -> WriterT w m () #

withRecovery :: (ParseError s e -> WriterT w m a) -> WriterT w m a -> WriterT w m a #

observing :: WriterT w m a -> WriterT w m (Either (ParseError s e) a) #

eof :: WriterT w m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> WriterT w m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> WriterT w m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> WriterT w m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> WriterT w m (Tokens s) #

takeP :: Maybe String -> Int -> WriterT w m (Tokens s) #

getParserState :: WriterT w m (State s e) #

updateParserState :: (State s e -> State s e) -> WriterT w m () #

mkParsec :: (State s e -> Reply e s a) -> WriterT w m a #

(Ord e, Stream s) => MonadParsec e s (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

parseError :: ParseError s e -> ParsecT e s m a #

label :: String -> ParsecT e s m a -> ParsecT e s m a #

hidden :: ParsecT e s m a -> ParsecT e s m a #

try :: ParsecT e s m a -> ParsecT e s m a #

lookAhead :: ParsecT e s m a -> ParsecT e s m a #

notFollowedBy :: ParsecT e s m a -> ParsecT e s m () #

withRecovery :: (ParseError s e -> ParsecT e s m a) -> ParsecT e s m a -> ParsecT e s m a #

observing :: ParsecT e s m a -> ParsecT e s m (Either (ParseError s e) a) #

eof :: ParsecT e s m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> ParsecT e s m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> ParsecT e s m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> ParsecT e s m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> ParsecT e s m (Tokens s) #

takeP :: Maybe String -> Int -> ParsecT e s m (Tokens s) #

getParserState :: ParsecT e s m (State s e) #

updateParserState :: (State s e -> State s e) -> ParsecT e s m () #

mkParsec :: (State s e -> Reply e s a) -> ParsecT e s m a #

(Monoid w, MonadParsec e s m) => MonadParsec e s (RWST r w st m)

Since: megaparsec-5.2.0

Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> RWST r w st m a #

label :: String -> RWST r w st m a -> RWST r w st m a #

hidden :: RWST r w st m a -> RWST r w st m a #

try :: RWST r w st m a -> RWST r w st m a #

lookAhead :: RWST r w st m a -> RWST r w st m a #

notFollowedBy :: RWST r w st m a -> RWST r w st m () #

withRecovery :: (ParseError s e -> RWST r w st m a) -> RWST r w st m a -> RWST r w st m a #

observing :: RWST r w st m a -> RWST r w st m (Either (ParseError s e) a) #

eof :: RWST r w st m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> RWST r w st m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> RWST r w st m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> RWST r w st m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> RWST r w st m (Tokens s) #

takeP :: Maybe String -> Int -> RWST r w st m (Tokens s) #

getParserState :: RWST r w st m (State s e) #

updateParserState :: (State s e -> State s e) -> RWST r w st m () #

mkParsec :: (State s e -> Reply e s a) -> RWST r w st m a #

(Monoid w, MonadParsec e s m) => MonadParsec e s (RWST r w st m)

Since: megaparsec-5.2.0

Instance details

Defined in Text.Megaparsec.Class

Methods

parseError :: ParseError s e -> RWST r w st m a #

label :: String -> RWST r w st m a -> RWST r w st m a #

hidden :: RWST r w st m a -> RWST r w st m a #

try :: RWST r w st m a -> RWST r w st m a #

lookAhead :: RWST r w st m a -> RWST r w st m a #

notFollowedBy :: RWST r w st m a -> RWST r w st m () #

withRecovery :: (ParseError s e -> RWST r w st m a) -> RWST r w st m a -> RWST r w st m a #

observing :: RWST r w st m a -> RWST r w st m (Either (ParseError s e) a) #

eof :: RWST r w st m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> RWST r w st m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> RWST r w st m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> RWST r w st m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> RWST r w st m (Tokens s) #

takeP :: Maybe String -> Int -> RWST r w st m (Tokens s) #

getParserState :: RWST r w st m (State s e) #

updateParserState :: (State s e -> State s e) -> RWST r w st m () #

mkParsec :: (State s e -> Reply e s a) -> RWST r w st m a #

data ParsecT e s (m :: Type -> Type) a #

ParsecT e s m a is a parser with custom data component of error e, stream type s, underlying monad m and return type a.

Instances

Instances details
(Ord e, Stream s) => MonadParsec e s (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

parseError :: ParseError s e -> ParsecT e s m a #

label :: String -> ParsecT e s m a -> ParsecT e s m a #

hidden :: ParsecT e s m a -> ParsecT e s m a #

try :: ParsecT e s m a -> ParsecT e s m a #

lookAhead :: ParsecT e s m a -> ParsecT e s m a #

notFollowedBy :: ParsecT e s m a -> ParsecT e s m () #

withRecovery :: (ParseError s e -> ParsecT e s m a) -> ParsecT e s m a -> ParsecT e s m a #

observing :: ParsecT e s m a -> ParsecT e s m (Either (ParseError s e) a) #

eof :: ParsecT e s m () #

token :: (Token s -> Maybe a) -> Set (ErrorItem (Token s)) -> ParsecT e s m a #

tokens :: (Tokens s -> Tokens s -> Bool) -> Tokens s -> ParsecT e s m (Tokens s) #

takeWhileP :: Maybe String -> (Token s -> Bool) -> ParsecT e s m (Tokens s) #

takeWhile1P :: Maybe String -> (Token s -> Bool) -> ParsecT e s m (Tokens s) #

takeP :: Maybe String -> Int -> ParsecT e s m (Tokens s) #

getParserState :: ParsecT e s m (State s e) #

updateParserState :: (State s e -> State s e) -> ParsecT e s m () #

mkParsec :: (State s e -> Reply e s a) -> ParsecT e s m a #

(Stream s, MonadError e' m) => MonadError e' (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

throwError :: e' -> ParsecT e s m a #

catchError :: ParsecT e s m a -> (e' -> ParsecT e s m a) -> ParsecT e s m a #

(Stream s, MonadReader r m) => MonadReader r (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

ask :: ParsecT e s m r #

local :: (r -> r) -> ParsecT e s m a -> ParsecT e s m a #

reader :: (r -> a) -> ParsecT e s m a #

(Stream s, MonadState st m) => MonadState st (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

get :: ParsecT e s m st #

put :: st -> ParsecT e s m () #

state :: (st -> (a, st)) -> ParsecT e s m a #

(Stream s, MonadWriter w m) => MonadWriter w (ParsecT e s m)

Since: megaparsec-9.5.0

Instance details

Defined in Text.Megaparsec.Internal

Methods

writer :: (a, w) -> ParsecT e s m a #

tell :: w -> ParsecT e s m () #

listen :: ParsecT e s m a -> ParsecT e s m (a, w) #

pass :: ParsecT e s m (a, w -> w) -> ParsecT e s m a #

Stream s => MonadTrans (ParsecT e s) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

lift :: Monad m => m a -> ParsecT e s m a #

Stream s => MonadFail (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

fail :: String -> ParsecT e s m a #

(Stream s, MonadFix m) => MonadFix (ParsecT e s m)

Since: megaparsec-6.0.0

Instance details

Defined in Text.Megaparsec.Internal

Methods

mfix :: (a -> ParsecT e s m a) -> ParsecT e s m a #

(Stream s, MonadIO m) => MonadIO (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

liftIO :: IO a -> ParsecT e s m a #

(Ord e, Stream s) => Alternative (ParsecT e s m)

empty is a parser that fails without consuming input.

Instance details

Defined in Text.Megaparsec.Internal

Methods

empty :: ParsecT e s m a #

(<|>) :: ParsecT e s m a -> ParsecT e s m a -> ParsecT e s m a #

some :: ParsecT e s m a -> ParsecT e s m [a] #

many :: ParsecT e s m a -> ParsecT e s m [a] #

Stream s => Applicative (ParsecT e s m)

pure returns a parser that succeeds without consuming input.

Instance details

Defined in Text.Megaparsec.Internal

Methods

pure :: a -> ParsecT e s m a #

(<*>) :: ParsecT e s m (a -> b) -> ParsecT e s m a -> ParsecT e s m b #

liftA2 :: (a -> b -> c) -> ParsecT e s m a -> ParsecT e s m b -> ParsecT e s m c #

(*>) :: ParsecT e s m a -> ParsecT e s m b -> ParsecT e s m b #

(<*) :: ParsecT e s m a -> ParsecT e s m b -> ParsecT e s m a #

Functor (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

fmap :: (a -> b) -> ParsecT e s m a -> ParsecT e s m b #

(<$) :: a -> ParsecT e s m b -> ParsecT e s m a #

Stream s => Monad (ParsecT e s m)

return returns a parser that succeeds without consuming input.

Instance details

Defined in Text.Megaparsec.Internal

Methods

(>>=) :: ParsecT e s m a -> (a -> ParsecT e s m b) -> ParsecT e s m b #

(>>) :: ParsecT e s m a -> ParsecT e s m b -> ParsecT e s m b #

return :: a -> ParsecT e s m a #

(Ord e, Stream s) => MonadPlus (ParsecT e s m)

mzero is a parser that fails without consuming input.

Note: strictly speaking, this instance is unlawful. The right identity law does not hold, e.g. in general this is not true:

v >> mzero = mero

However the following holds:

try v >> mzero = mzero
Instance details

Defined in Text.Megaparsec.Internal

Methods

mzero :: ParsecT e s m a #

mplus :: ParsecT e s m a -> ParsecT e s m a -> ParsecT e s m a #

(Stream s, MonadCont m) => MonadCont (ParsecT e s m) 
Instance details

Defined in Text.Megaparsec.Internal

Methods

callCC :: ((a -> ParsecT e s m b) -> ParsecT e s m a) -> ParsecT e s m a #

(a ~ Tokens s, IsString a, Eq a, Stream s, Ord e) => IsString (ParsecT e s m a)

Since: megaparsec-6.3.0

Instance details

Defined in Text.Megaparsec.Internal

Methods

fromString :: String -> ParsecT e s m a #

(Stream s, Monoid a) => Monoid (ParsecT e s m a)

Since: megaparsec-5.3.0

Instance details

Defined in Text.Megaparsec.Internal

Methods

mempty :: ParsecT e s m a #

mappend :: ParsecT e s m a -> ParsecT e s m a -> ParsecT e s m a #

mconcat :: [ParsecT e s m a] -> ParsecT e s m a #

(Stream s, Semigroup a) => Semigroup (ParsecT e s m a)

Since: megaparsec-5.3.0

Instance details

Defined in Text.Megaparsec.Internal

Methods

(<>) :: ParsecT e s m a -> ParsecT e s m a -> ParsecT e s m a #

sconcat :: NonEmpty (ParsecT e s m a) -> ParsecT e s m a #

stimes :: Integral b => b -> ParsecT e s m a -> ParsecT e s m a #

type Parsec e s = ParsecT e s Identity #

Parsec is a non-transformer variant of the more general ParsecT monad transformer.

pattern TrivialError :: Int -> Maybe (ErrorItem (Token s)) -> Set (ErrorItem (Token s)) -> ParseError s e #

Trivial errors, generated by the Megaparsec's machinery. The data constructor includes the offset of error, unexpected token (if any), and expected tokens.

Type of the first argument was changed in the version 7.0.0.

pattern FancyError :: Int -> Set (ErrorFancy e) -> ParseError s e #

Fancy, custom errors.

Type of the first argument was changed in the version 7.0.0.

some :: MonadPlus m => m a -> m [a] #

some p applies the parser p one or more times and returns a list of the values returned by p.

word = some letter

empty :: Alternative f => f a #

The identity of <|>

(<|>) :: Alternative f => f a -> f a -> f a infixl 3 #

An associative binary operation

many :: MonadPlus m => m a -> m [a] #

many p applies the parser p zero or more times and returns a list of the values returned by p.

identifier = (:) <$> letter <*> many (alphaNumChar <|> char '_')

satisfy #

Arguments

:: MonadParsec e s m 
=> (Token s -> Bool)

Predicate to apply

-> m (Token s) 

The parser satisfy f succeeds for any token for which the supplied function f returns True.

digitChar = satisfy isDigit <?> "digit"
oneOf cs  = satisfy (`elem` cs)

Performance note: when you need to parse a single token, it is often a good idea to use satisfy with the right predicate function instead of creating a complex parser using the combinators.

See also: anySingle, anySingleBut, oneOf, noneOf.

Since: megaparsec-7.0.0

choice :: (Foldable f, Alternative m) => f (m a) -> m a #

choice ps tries to apply the parsers in the list ps in order, until one of them succeeds. Returns the value of the succeeding parser.

choice = asum

count :: Monad m => Int -> m a -> m [a] #

count n p parses n occurrences of p. If n is smaller or equal to zero, the parser equals to return []. Returns a list of n values.

See also: skipCount, count'.

between :: Applicative m => m open -> m close -> m a -> m a #

between open close p parses open, followed by p and close. Returns the value returned by p.

braces = between (symbol "{") (symbol "}")

option :: Alternative m => a -> m a -> m a #

option x p tries to apply the parser p. If p fails without consuming input, it returns the value x, otherwise the value returned by p.

option x p = p <|> pure x

See also: optional.

optional :: Alternative f => f a -> f (Maybe a) #

One or none.

It is useful for modelling any computation that is allowed to fail.

Examples

Expand

Using the Alternative instance of Control.Monad.Except, the following functions:

>>> import Control.Monad.Except
>>> canFail = throwError "it failed" :: Except String Int
>>> final = return 42                :: Except String Int

Can be combined by allowing the first function to fail:

>>> runExcept $ canFail *> final
Left "it failed"
>>> runExcept $ optional canFail *> final
Right 42

skipMany :: MonadPlus m => m a -> m () #

skipMany p applies the parser p zero or more times, skipping its result.

See also: manyTill, skipManyTill.

sepBy :: MonadPlus m => m a -> m sep -> m [a] #

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

commaSep p = p `sepBy` comma

sepBy1 :: MonadPlus m => m a -> m sep -> m [a] #

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

endBy :: MonadPlus m => m a -> m sep -> m [a] #

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

cStatements = cStatement `endBy` semicolon

endBy1 :: MonadPlus m => m a -> m sep -> m [a] #

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

manyTill :: MonadPlus m => m a -> m end -> m [a] #

manyTill p end applies parser p zero or more times until parser end succeeds. Returns the list of values returned by p. Note that end result is consumed and lost. Use manyTill_ if you wish to keep it.

See also: skipMany, skipManyTill.

chunk #

Arguments

:: MonadParsec e s m 
=> Tokens s

Chunk to match

-> m (Tokens s) 

chunk chk only matches the chunk chk.

divOrMod = chunk "div" <|> chunk "mod"

See also: tokens, string, string.

Since: megaparsec-7.0.0

match :: MonadParsec e s m => m a -> m (Tokens s, a) #

Return both the result of a parse and a chunk of input that was consumed during parsing. This relies on the change of the stateOffset value to evaluate how many tokens were consumed. If you mess with it manually in the argument parser, prepare for troubles.

Since: megaparsec-5.3.0

noneOf #

Arguments

:: (Foldable f, MonadParsec e s m) 
=> f (Token s)

Collection of taken we should not match

-> m (Token s) 

As the dual of oneOf, noneOf ts succeeds if the current token not in the supplied list of tokens ts. Returns the parsed character. Note that this parser cannot automatically generate the “expected” component of error message, so usually you should label it manually with label or (<?>).

noneOf cs = satisfy (`notElem` cs)

See also: satisfy.

Performance note: prefer satisfy and anySingleBut when you can because it's faster.

Since: megaparsec-7.0.0

mkPos :: Int -> Pos #

Construction of Pos from Int. The function throws InvalidPosException when given a non-positive argument.

Since: megaparsec-6.0.0

unPos :: Pos -> Int #

Extract Int from Pos.

Since: megaparsec-6.0.0

pos1 :: Pos #

Position with value 1.

Since: megaparsec-6.0.0

defaultTabWidth :: Pos #

Value of tab width used by default. Always prefer this constant when you want to refer to the default tab width because actual value may change in future.

Currently:

defaultTabWidth = mkPos 8

Since: megaparsec-5.0.0

initialPos :: FilePath -> SourcePos #

Construct initial position (line 1, column 1) given name of source file.

sourcePosPretty :: SourcePos -> String #

Pretty-print a SourcePos.

Since: megaparsec-5.0.0

mapParseError :: Ord e' => (e -> e') -> ParseError s e -> ParseError s e' #

Modify the custom data component in a parse error. This could be done via fmap if not for the Ord constraint.

Since: megaparsec-7.0.0

errorOffset :: ParseError s e -> Int #

Get the offset of a ParseError.

Since: megaparsec-7.0.0

setErrorOffset :: Int -> ParseError s e -> ParseError s e #

Set the offset of a ParseError.

Since: megaparsec-8.0.0

attachSourcePos #

Arguments

:: (Traversable t, TraversableStream s) 
=> (a -> Int)

How to project offset from an item (e.g. errorOffset)

-> t a

The collection of items

-> PosState s

Initial PosState

-> (t (a, SourcePos), PosState s)

The collection with SourcePoses added and the final PosState

Attach SourcePoses to items in a Traversable container given that there is a projection allowing us to get an offset per item.

Items must be in ascending order with respect to their offsets.

Since: megaparsec-7.0.0

errorBundlePretty #

Arguments

:: (VisualStream s, TraversableStream s, ShowErrorComponent e) 
=> ParseErrorBundle s e

Parse error bundle to display

-> String

Textual rendition of the bundle

Pretty-print a ParseErrorBundle. All ParseErrors in the bundle will be pretty-printed in order together with the corresponding offending lines by doing a single pass over the input stream. The rendered String always ends with a newline.

Since: megaparsec-7.0.0

parseErrorPretty #

Arguments

:: (VisualStream s, ShowErrorComponent e) 
=> ParseError s e

Parse error to render

-> String

Result of rendering

Pretty-print a ParseError. The rendered String always ends with a newline.

Since: megaparsec-5.0.0

parseErrorTextPretty #

Arguments

:: (VisualStream s, ShowErrorComponent e) 
=> ParseError s e

Parse error to render

-> String

Result of rendering

Pretty-print a textual part of a ParseError, that is, everything except for its position. The rendered String always ends with a newline.

Since: megaparsec-5.1.0

showErrorItem :: VisualStream s => Proxy s -> ErrorItem (Token s) -> String #

Pretty-print an ErrorItem.

Since: megaparsec-9.4.0

parse #

Arguments

:: Parsec e s a

Parser to run

-> String

Name of source file

-> s

Input for parser

-> Either (ParseErrorBundle s e) a 

parse p file input runs parser p over Identity (see runParserT if you're using the ParsecT monad transformer; parse itself is just a synonym for runParser). It returns either a ParseErrorBundle (Left) or a value of type a (Right). errorBundlePretty can be used to turn ParseErrorBundle into the string representation of the error message. See Text.Megaparsec.Error if you need to do more advanced error analysis.

main = case parse numbers "" "11,2,43" of
         Left bundle -> putStr (errorBundlePretty bundle)
         Right xs -> print (sum xs)

numbers = decimal `sepBy` char ','

parse is the same as runParser.

parseMaybe :: (Ord e, Stream s) => Parsec e s a -> s -> Maybe a #

parseMaybe p input runs the parser p on input and returns the result inside Just on success and Nothing on failure. This function also parses eof, so if the parser doesn't consume all of its input, it will fail.

The function is supposed to be useful for lightweight parsing, where error messages (and thus file names) are not important and entire input should be consumed. For example, it can be used for parsing of a single number according to a specification of its format.

parseTest #

Arguments

:: (ShowErrorComponent e, Show a, VisualStream s, TraversableStream s) 
=> Parsec e s a

Parser to run

-> s

Input for parser

-> IO () 

The expression parseTest p input applies the parser p on the input input and prints the result to stdout. Useful for testing.

runParser #

Arguments

:: Parsec e s a

Parser to run

-> String

Name of source file

-> s

Input for parser

-> Either (ParseErrorBundle s e) a 

runParser p file input runs parser p on the input stream of tokens input, obtained from source file. The file is only used in error messages and may be the empty string. Returns either a ParseErrorBundle (Left) or a value of type a (Right).

parseFromFile p file = runParser p file <$> readFile file

runParser is the same as parse.

runParser' #

Arguments

:: Parsec e s a

Parser to run

-> State s e

Initial state

-> (State s e, Either (ParseErrorBundle s e) a) 

The function is similar to runParser with the difference that it accepts and returns the parser state. This allows us e.g. to specify arbitrary textual position at the beginning of parsing. This is the most general way to run a parser over the Identity monad.

Since: megaparsec-4.2.0

runParserT #

Arguments

:: Monad m 
=> ParsecT e s m a

Parser to run

-> String

Name of source file

-> s

Input for parser

-> m (Either (ParseErrorBundle s e) a) 

runParserT p file input runs parser p on the input list of tokens input, obtained from source file. The file is only used in error messages and may be the empty string. Returns a computation in the underlying monad m that returns either a ParseErrorBundle (Left) or a value of type a (Right).

runParserT' #

Arguments

:: Monad m 
=> ParsecT e s m a

Parser to run

-> State s e

Initial state

-> m (State s e, Either (ParseErrorBundle s e) a) 

This function is similar to runParserT, but like runParser' it accepts and returns parser state. This is thus the most general way to run a parser.

Since: megaparsec-4.2.0

failure #

Arguments

:: MonadParsec e s m 
=> Maybe (ErrorItem (Token s))

Unexpected item (if any)

-> Set (ErrorItem (Token s))

Expected items

-> m a 

Stop parsing and report a trivial ParseError.

Since: megaparsec-6.0.0

fancyFailure #

Arguments

:: MonadParsec e s m 
=> Set (ErrorFancy e)

Fancy error components

-> m a 

Stop parsing and report a fancy ParseError. To report a single custom parse error, see customFailure.

Since: megaparsec-6.0.0

unexpected :: MonadParsec e s m => ErrorItem (Token s) -> m a #

The parser unexpected item fails with an error message telling about unexpected item item without consuming any input.

unexpected item = failure (Just item) Set.empty

customFailure :: MonadParsec e s m => e -> m a #

Report a custom parse error. For a more general version, see fancyFailure.

customFailure = fancyFailure . Set.singleton . ErrorCustom

Since: megaparsec-6.3.0

region #

Arguments

:: MonadParsec e s m 
=> (ParseError s e -> ParseError s e)

How to process ParseErrors

-> m a

The “region” that the processing applies to

-> m a 

Specify how to process ParseErrors that happen inside of this wrapper. This applies to both normal and delayed ParseErrors.

As a side-effect of the implementation the inner computation will start with an empty collection of delayed errors and they will be updated and “restored” on the way out of region.

Since: megaparsec-5.3.0

registerParseError :: MonadParsec e s m => ParseError s e -> m () #

Register a ParseError for later reporting. This action does not end parsing and has no effect except for adding the given ParseError to the collection of “delayed” ParseErrors which will be taken into consideration at the end of parsing. Only if this collection is empty the parser will succeed. This is the main way to report several parse errors at once.

Since: megaparsec-8.0.0

registerFailure #

Arguments

:: MonadParsec e s m 
=> Maybe (ErrorItem (Token s))

Unexpected item (if any)

-> Set (ErrorItem (Token s))

Expected items

-> m () 

Like failure, but for delayed ParseErrors.

Since: megaparsec-8.0.0

registerFancyFailure #

Arguments

:: MonadParsec e s m 
=> Set (ErrorFancy e)

Fancy error components

-> m () 

Like fancyFailure, but for delayed ParseErrors.

Since: megaparsec-8.0.0

single #

Arguments

:: MonadParsec e s m 
=> Token s

Token to match

-> m (Token s) 

single t only matches the single token t.

semicolon = single ';'

See also: token, anySingle, char, char.

Since: megaparsec-7.0.0

anySingle :: MonadParsec e s m => m (Token s) #

Parse and return a single token. It's a good idea to attach a label to this parser.

anySingle = satisfy (const True)

See also: satisfy, anySingleBut.

Since: megaparsec-7.0.0

anySingleBut #

Arguments

:: MonadParsec e s m 
=> Token s

Token we should not match

-> m (Token s) 

Match any token but the given one. It's a good idea to attach a label to this parser.

anySingleBut t = satisfy (/= t)

See also: single, anySingle, satisfy.

Since: megaparsec-7.0.0

oneOf #

Arguments

:: (Foldable f, MonadParsec e s m) 
=> f (Token s)

Collection of matching tokens

-> m (Token s) 

oneOf ts succeeds if the current token is in the supplied collection of tokens ts. Returns the parsed token. Note that this parser cannot automatically generate the “expected” component of error message, so usually you should label it manually with label or (<?>).

oneOf cs = satisfy (`elem` cs)

See also: satisfy.

digit = oneOf ['0'..'9'] <?> "digit"

Performance note: prefer satisfy when you can because it's faster when you have only a couple of tokens to compare to:

quoteFast = satisfy (\x -> x == '\'' || x == '\"')
quoteSlow = oneOf "'\""

Since: megaparsec-7.0.0

(<?>) :: MonadParsec e s m => m a -> String -> m a infix 0 #

A synonym for label in the form of an operator.

takeRest :: MonadParsec e s m => m (Tokens s) #

Consume the rest of the input and return it as a chunk. This parser never fails, but may return the empty chunk.

takeRest = takeWhileP Nothing (const True)

Since: megaparsec-6.0.0

atEnd :: MonadParsec e s m => m Bool #

Return True when end of input has been reached.

atEnd = option False (True <$ hidden eof)

Since: megaparsec-6.0.0

getInput :: MonadParsec e s m => m s #

Return the current input.

setInput :: MonadParsec e s m => s -> m () #

setInput input continues parsing with input.

getSourcePos :: (TraversableStream s, MonadParsec e s m) => m SourcePos #

Return the current source position. This function is not cheap, do not call it e.g. on matching of every token, that's a bad idea. Still you can use it to get SourcePos to attach to things that you parse.

The function works under the assumption that we move in the input stream only forwards and never backwards, which is always true unless the user abuses the library.

Since: megaparsec-7.0.0

getOffset :: MonadParsec e s m => m Int #

Get the number of tokens processed so far.

See also: setOffset.

Since: megaparsec-7.0.0

setOffset :: MonadParsec e s m => Int -> m () #

Set the number of tokens processed so far.

See also: getOffset.

Since: megaparsec-7.0.0

setParserState :: MonadParsec e s m => State s e -> m () #

setParserState st sets the parser state to st.

See also: getParserState, updateParserState.

count' :: MonadPlus m => Int -> Int -> m a -> m [a] #

count' m n p parses from m to n occurrences of p. If n is not positive or m > n, the parser equals to return []. Returns a list of parsed values.

Please note that m may be negative, in this case effect is the same as if it were equal to zero.

See also: skipCount, count.

eitherP :: Alternative m => m a -> m b -> m (Either a b) #

Combine two alternatives.

eitherP a b = (Left <$> a) <|> (Right <$> b)

manyTill_ :: MonadPlus m => m a -> m end -> m ([a], end) #

manyTill_ p end applies parser p zero or more times until parser end succeeds. Returns the list of values returned by p and the end result. Use manyTill if you have no need in the result of the end.

See also: skipMany, skipManyTill.

Since: parser-combinators-1.2.0

someTill :: MonadPlus m => m a -> m end -> m [a] #

someTill p end works similarly to manyTill p end, but p should succeed at least once. Note that end result is consumed and lost. Use someTill_ if you wish to keep it.

someTill p end = liftM2 (:) p (manyTill p end)

See also: skipSome, skipSomeTill.

someTill_ :: MonadPlus m => m a -> m end -> m ([a], end) #

someTill_ p end works similarly to manyTill_ p end, but p should succeed at least once. Use someTill if you have no need in the result of the end.

See also: skipSome, skipSomeTill.

Since: parser-combinators-1.2.0

sepEndBy :: MonadPlus m => m a -> m sep -> m [a] #

sepEndBy p sep parses zero or more occurrences of p, separated and optionally ended by sep. Returns a list of values returned by p.

sepEndBy1 :: MonadPlus m => m a -> m sep -> m [a] #

sepEndBy1 p sep parses one or more occurrences of p, separated and optionally ended by sep. Returns a list of values returned by p.

skipSome :: MonadPlus m => m a -> m () #

skipSome p applies the parser p one or more times, skipping its result.

See also: someTill, skipSomeTill.

skipCount :: Monad m => Int -> m a -> m () #

skipCount n p parses n occurrences of p, skipping its result. If n is smaller or equal to zero, the parser equals to return ().

See also: count, count'.

skipManyTill :: MonadPlus m => m a -> m end -> m end #

skipManyTill p end applies the parser p zero or more times skipping results until parser end succeeds. Result parsed by end is then returned.

See also: manyTill, skipMany.

skipSomeTill :: MonadPlus m => m a -> m end -> m end #

skipSomeTill p end applies the parser p one or more times skipping results until parser end succeeds. Result parsed by end is then returned.

See also: someTill, skipSome.