darcs-beta-2.4.98.5: a distributed, interactive, smart revision control system

Darcs.Patch.ReadMonads

Description

This module defines our parsing monad. In the past there have been lazy and strict parsers in this module. Currently we have only the strict variant and it is used for parsing patch files.

Synopsis

Documentation

class Monad m => ParserM m whereSource

Methods

work :: (ByteString -> Maybe (a, ByteString)) -> m aSource

Applies a parsing function inside the ParserM monad.

maybeWork :: (ByteString -> Maybe (a, ByteString)) -> m (Maybe a)Source

Applies a parsing function, that can return Nothing, inside the ParserM monad.

peekInput :: m ByteStringSource

Allows for the inspection of the input that is yet to be parsed.

Instances

ParserM SM 

alterInput :: ParserM m => (ByteString -> ByteString) -> m ()Source

Applies a function to the input stream and discards the result of the function.

parseStrictly :: SM a -> ByteString -> Maybe (a, ByteString)Source

parseStrictly applies the parser functions to a string and checks that each parser produced a result as it goes. The strictness is in the ParserM instance for SM.

lexChar :: ParserM m => Char -> m ()Source

lexChar checks if the next space delimited token from the input stream matches a specific Char. Uses Maybe inside ParserM to handle failed matches, so that it always returns () on success.

lexString :: ParserM m => String -> m ()Source

lexString fetches the next whitespace delimited token from from the input and checks if it matches the String input. Uses Maybe inside ParserM to handle failed matches, so that it always returns () on success.

lexStrings :: ParserM m => [String] -> m StringSource

Checks if any of the input Strings match the next space delimited token in the input stream. Uses Maybe inside ParserM to handle failed matches, on success it returns the matching String.

lexEof :: ParserM m => m ()Source

lexEof looks for optional spaces followed by the end of input. Uses Maybe inside ParserM to handle failed matches, so that it always returns () on success.

myLex :: ByteString -> Maybe (ByteString, ByteString)Source

myLex drops leading spaces and then breaks the string at the next space. Returns Nothing when the string is empty after dropping leading spaces, otherwise it returns the first sequence of non-spaces and the remainder of the input.