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

Safe HaskellNone




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



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.


 ghci> import Data.Attoparsec.ByteString.Char8
 ghci> is <- fromList ["12345xxx" :: ByteString]
 ghci> parseFromStream (takeWhile isDigit) is
 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.


 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
 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.


ParseException String