-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Simple monadic parser for ASN1 stream types.
--   
--   Simple monadic parser for ASN1 stream types, when ASN1 pattern
--   matching is not convenient.
@package asn1-parse
@version 0.8.0


module Data.ASN1.Parse

-- | Parse ASN1 Monad
data ParseASN1 a

-- | run the parse monad over a stream and returns the result and the
--   remaining ASN1 Stream.
runParseASN1State :: ParseASN1 a -> [ASN1] -> Either String (a, [ASN1])

-- | run the parse monad over a stream and returns the result.
runParseASN1 :: ParseASN1 a -> [ASN1] -> Either String a

-- | run a function of the next elements of a container of specified type
onNextContainer :: ASN1ConstructionType -> ParseASN1 a -> ParseASN1 a

-- | just like onNextContainer, except it doens't throw an error if the
--   container doesn't exists.
onNextContainerMaybe :: ASN1ConstructionType -> ParseASN1 a -> ParseASN1 (Maybe a)

-- | get next container of specified type and return all its elements
getNextContainer :: ASN1ConstructionType -> ParseASN1 [ASN1]

-- | just like getNextContainer, except it doesn't throw an error if the
--   container doesn't exists.
getNextContainerMaybe :: ASN1ConstructionType -> ParseASN1 (Maybe [ASN1])

-- | get next element from the stream
getNext :: ParseASN1 ASN1

-- | get next element from the stream maybe
getNextMaybe :: (ASN1 -> Maybe a) -> ParseASN1 (Maybe a)

-- | returns if there's more elements in the stream.
hasNext :: ParseASN1 Bool

-- | get next object
getObject :: ASN1Object a => ParseASN1 a

-- | get many elements until there's nothing left
getMany :: ParseASN1 a -> ParseASN1 [a]
instance Functor ParseASN1
instance Applicative ParseASN1
instance Monad ParseASN1
instance MonadError String ParseASN1
