{-# LANGUAGE UnicodeSyntax #-} -- |This is an auxiliary parser utilities. You usually don't have to -- use this module directly. module Network.HTTP.Lucu.Parser ( atMost , finishOff ) where import Control.Applicative import Control.Applicative.Unicode import Control.Monad.Unicode import Data.Attoparsec import Prelude.Unicode -- |@'atMost' n v@ is like @'P.many' v@ but accumulates @v@ at most -- @n@ times. atMost ∷ Alternative f ⇒ Int → f α → f [α] {-# INLINE atMost #-} atMost 0 _ = pure [] atMost n v = ( (:) <$> v ⊛ atMost (n-1) v ) <|> pure [] -- |@'finishOff' p@ is equivalent to @p '>>=' \\a -> 'endOfInput' '>>' -- 'return' a@. finishOff ∷ Parser α → Parser α {-# INLINE finishOff #-} finishOff = ((endOfInput *>) ∘ return =≪)