io-streams-1.0.2.1: Simple, composable, and easy-to-use stream I/O

Safe HaskellNone

System.IO.Streams.Attoparsec

Contents

Description

This module provides support for parsing values from InputStreams using attoparsec.

Synopsis

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 (takeWhile isDigit) is
 "12345"
 ghci> read is
 Just "xxx"

parserToInputStream :: Parser (Maybe r) -> InputStream ByteString -> IO (InputStream r)Source

Given a Parser yielding values of type Maybe r, transforms an InputStream 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 >> pure Nothing) <|> (Just <$> (skipWhile isSpace *> decimal))
 ghci> parserToInputStream parser is >>= toList
 [1,2,3,4,5]
 ghci> is' <- fromList ["1 2xx3 4 5" :: ByteString] >>= parserToInputStream parser
 ghci> read is'
 Just 1
 ghci> read is'
 Just 2
 ghci> read is'
 *** Exception: Parse exception: Failed reading: takeWhile1

data ParseException Source

An exception raised when parsing fails.

Constructors

ParseException String