| Safe Haskell | None |
|---|
System.IO.Streams.Attoparsec
Contents
Description
This module provides support for parsing values from InputStreams using
attoparsec.
- parseFromStream :: Parser r -> InputStream ByteString -> IO r
- parserToInputStream :: Parser (Maybe r) -> InputStream ByteString -> IO (InputStream r)
- data ParseException = ParseException String
Parsing
parseFromStream :: Parser r -> InputStream ByteString -> IO rSource
Supplies an attoparsec Parser with an InputStream, returning the
final parsed value or a ParseException if parsing fails.
parseFromStream consumes only as much input as necessary to satisfy the
Parser and unconsumed input is pushed back onto the InputStream.
If the Parser exhausts the InputStream, it receives an EOF.
Example:
ghci> import Data.Attoparsec.ByteString.Char8 ghci> is <-fromList["12345xxx" ::ByteString] ghci>parseFromStream(takeWhileisDigit) is "12345" ghci>readis Just "xxx"
parserToInputStream :: Parser (Maybe r) -> InputStream ByteString -> IO (InputStream r)Source
Given a Parser yielding values of type , transforms an
Maybe rInputStream over byte strings to an InputStream yielding values of type
r.
If the parser yields Just x, then x will be passed along downstream, and
if the parser yields Nothing, that will be interpreted as end-of-stream.
Upon a parse error, parserToInputStream will throw a ParseException.
Example:
ghci> import Control.Applicative ghci> import Data.Attoparsec.ByteString.Char8 ghci> is <-fromList["1 2 3 4 5" ::ByteString] ghci> let parser = (endOfInput>>pureNothing) <|> (Just <$> (skipWhileisSpace*>decimal)) ghci>parserToInputStreamparser is >>=toList[1,2,3,4,5] ghci> is' <-fromList["1 2xx3 4 5" ::ByteString] >>=parserToInputStreamparser ghci>readis' Just 1 ghci>readis' Just 2 ghci>readis' *** Exception: Parse exception: Failed reading: takeWhile1