{-# LANGUAGE FlexibleContexts #-}

module Language.Ltml.Parser.Common.Combinators
    ( manyTillSucc
    )
where

import Language.Ltml.Parser (MonadParser)
import Text.Megaparsec (lookAhead, manyTill, try)

-- | Like 'manyTill', but never consume input for the @end@ parser.
manyTillSucc :: (MonadParser m) => m a -> m end -> m [a]
manyTillSucc :: forall (m :: * -> *) a end. MonadParser m => m a -> m end -> m [a]
manyTillSucc m a
p m end
end = m a -> m end -> m [a]
forall (m :: * -> *) a end. MonadPlus m => m a -> m end -> m [a]
manyTill m a
p (m end -> m end
forall a. m a -> m a
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
lookAhead (m end -> m end) -> m end -> m end
forall a b. (a -> b) -> a -> b
$ m end -> m end
forall a. m a -> m a
forall e s (m :: * -> *) a. MonadParsec e s m => m a -> m a
try m end
end)