scanner-0.2: Fast non-backtracking incremental combinator parsing for bytestrings

Safe HaskellNone
LanguageHaskell2010

Scanner.Internal

Description

Scanner implementation

Synopsis

Documentation

newtype Scanner a Source

CPS scanner without backtracking

Constructors

Scanner 

Fields

run :: forall r. ByteString -> Next a r -> Result r
 

type Next a r = ByteString -> a -> Result r Source

Scanner continuation

data Result r Source

Scanner result

Constructors

Done ByteString r

Successful result with the rest of input

Fail ByteString String

Scanner failed with rest of input and error message

More (ByteString -> Result r)

Need more input

scan :: Scanner r -> ByteString -> Result r Source

Run scanner with the input

anyWord8 :: Scanner Word8 Source

Consume the next word

It fails if end of input

takeWhile :: (Word8 -> Bool) -> Scanner ByteString Source

Take input while the predicate is True

take :: Int -> Scanner ByteString Source

Take the specified number of bytes

endOfInput :: Scanner Bool Source

Returns True when there is no more input

string :: ByteString -> Scanner () Source

Consume the specified string

Warning: it is not optimized yet, so for for small string it is better to consume it byte-by-byte using word8

lookAhead :: Scanner (Maybe Word8) Source

Return the next byte, if any, without consuming it