Safe Haskell | None |
---|
Parsing utilities for bytestrings, in the style of pipes-parse
- nextByte :: Monad m => Producer BS.ByteString m r -> m (Either r (Word8, Producer BS.ByteString m r))
- drawByte :: Monad m => StateT (Producer BS.ByteString m r) m (Either r Word8)
- unDrawByte :: Monad m => Word8 -> StateT (Producer BS.ByteString m r) m ()
- peekByte :: Monad m => StateT (Producer BS.ByteString m r) m (Either r Word8)
- isEndOfBytes :: Monad m => StateT (Producer BS.ByteString m r) m Bool
- take :: (Monad m, Integral a) => a -> Pipe BS.ByteString BS.ByteString (StateT (Producer BS.ByteString m r) m) ()
- takeWhile :: Monad m => (Word8 -> Bool) -> Pipe BS.ByteString BS.ByteString (StateT (Producer BS.ByteString m r) m) ()
Parsers
nextByte :: Monad m => Producer BS.ByteString m r -> m (Either r (Word8, Producer BS.ByteString m r))Source
unDrawByte :: Monad m => Word8 -> StateT (Producer BS.ByteString m r) m ()Source
peekByte :: Monad m => StateT (Producer BS.ByteString m r) m (Either r Word8)Source
peekByte
checks the first Word8
in the stream, but uses unDrawByte
to
push the Word8
back
peekByte = do x <- drawByte case x of Left _ -> return () Right w8 -> unDrawByte w8 return x
isEndOfBytes :: Monad m => StateT (Producer BS.ByteString m r) m BoolSource
Check if the underlying Producer
has no more bytes
Note that this will skip over empty BS.ByteString
chunks, unlike
PP.isEndOfInput
from pipes-parse
.
isEndOfBytes = liftM isLeft peekByte
take :: (Monad m, Integral a) => a -> Pipe BS.ByteString BS.ByteString (StateT (Producer BS.ByteString m r) m) ()Source
takeWhile :: Monad m => (Word8 -> Bool) -> Pipe BS.ByteString BS.ByteString (StateT (Producer BS.ByteString m r) m) ()Source