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

Safe HaskellSafe
LanguageHaskell2010

Scanner.Internal

Description

Scanner implementation

Synopsis

Documentation

data Scanner a Source #

CPS scanner without backtracking

Constructors

Scanner 

Fields

Instances

Monad Scanner Source # 

Methods

(>>=) :: Scanner a -> (a -> Scanner b) -> Scanner b #

(>>) :: Scanner a -> Scanner b -> Scanner b #

return :: a -> Scanner a #

fail :: String -> Scanner a #

Functor Scanner Source # 

Methods

fmap :: (a -> b) -> Scanner a -> Scanner b #

(<$) :: a -> Scanner b -> Scanner a #

Applicative Scanner Source # 

Methods

pure :: a -> Scanner a #

(<*>) :: Scanner (a -> b) -> Scanner a -> Scanner b #

(*>) :: Scanner a -> Scanner b -> Scanner b #

(<*) :: Scanner a -> Scanner b -> Scanner a #

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