| Copyright | 2016 John Ky, 2011 Michael Snoyman, 2010 John Millikin |
|---|---|
| License | MIT |
| Safe Haskell | None |
| Language | Haskell2010 |
HaskellWorks.Data.Conduit.Tokenize.Attoparsec
Description
Conduits for tokenizing streams.
This code was taken from attoparsec-enumerator and adapted for conduits.
- sinkParser :: (AttoparsecInput a, AttoparsecState a s, MonadThrow m, Exception (ParseError s)) => s -> Parser a b -> Consumer a m b
- sinkParserEither :: (AttoparsecInput a, AttoparsecState a s, Monad m) => s -> Parser a b -> Consumer a m (Either (ParseError s) b)
- conduitParser :: (AttoparsecInput a, AttoparsecState a s, MonadThrow m, Exception (ParseError s)) => s -> Parser a b -> Conduit a m (ParseDelta s, b)
- conduitParserEither :: (Monad m, AttoparsecInput a, AttoparsecState a s) => s -> Parser a b -> Conduit a m (Either (ParseError s) (ParseDelta s, b))
- data ParseError s
- = ParseError {
- errorContexts :: [String]
- errorMessage :: String
- errorPosition :: s
- | DivergentParser
- = ParseError {
- data ParseDelta s = ParseDelta {}
- class AttoparsecInput a where
- class AttoparsecState a s where
- getState :: a -> s
- modState :: AttoparsecInput a => a -> s -> s
Sink
sinkParser :: (AttoparsecInput a, AttoparsecState a s, MonadThrow m, Exception (ParseError s)) => s -> Parser a b -> Consumer a m b Source
Convert an Attoparsec Parser into a Sink. The parser will
be streamed bytes until it returns Done or Fail.
If parsing fails, a ParseError will be thrown with monadThrow.
Since 0.5.0
sinkParserEither :: (AttoparsecInput a, AttoparsecState a s, Monad m) => s -> Parser a b -> Consumer a m (Either (ParseError s) b) Source
Same as sinkParser, but we return an Either type instead
of raising an exception.
Since 1.1.5
Conduit
conduitParser :: (AttoparsecInput a, AttoparsecState a s, MonadThrow m, Exception (ParseError s)) => s -> Parser a b -> Conduit a m (ParseDelta s, b) Source
Consume a stream of parsed tokens, returning both the token and
the position it appears at. This function will raise a ParseError
on bad input.
Since 0.5.0
conduitParserEither :: (Monad m, AttoparsecInput a, AttoparsecState a s) => s -> Parser a b -> Conduit a m (Either (ParseError s) (ParseDelta s, b)) Source
Same as conduitParser, but we return an Either type instead
of raising an exception.
Types
data ParseError s Source
The context and message from a Fail value.
Constructors
| ParseError | |
Fields
| |
| DivergentParser | |
Instances
| Show s => Show (ParseError s) Source | |
| Exception (ParseError Position) | |
| Exception (ParseError Offset) |
data ParseDelta s Source
The before and after state of a single parse in a conduit stream.
Constructors
| ParseDelta | |
Instances
| Eq s => Eq (ParseDelta s) Source | |
| Ord s => Ord (ParseDelta s) Source | |
| Show (ParseDelta Position) | |
| Show (ParseDelta Offset) |
Classes
class AttoparsecInput a where Source
A class of types which may be consumed by an Attoparsec parser.
Methods
parseA :: Parser a b -> a -> IResult a b Source
feedA :: IResult a b -> a -> IResult a b Source
stripFromEnd :: a -> a -> a Source
Return the beginning of the first input with the length of the second input removed. Assumes the second string is shorter than the first.
Instances
class AttoparsecState a s where Source
A class of types and states which may be consumed by an Attoparsec parser.