Cabal-2.0.0.2: Distribution/Compat/Parsec.hs
{-# LANGUAGE FlexibleContexts #-}
module Distribution.Compat.Parsec (
P.Parsec,
P.ParsecT,
P.Stream,
(P.<?>),
P.runParser,
-- * Combinators
P.between,
P.option,
P.optional,
P.optionMaybe,
P.try,
P.sepBy,
P.sepBy1,
P.choice,
-- * Char
integral,
P.char,
P.anyChar,
P.satisfy,
P.space,
P.spaces,
P.string,
munch,
munch1,
P.oneOf,
) where
import Distribution.Compat.Prelude
import Prelude ()
import qualified Text.Parsec as P
import qualified Text.Parsec.Pos as P
integral :: (P.Stream s m Char, Integral a) => P.ParsecT s u m a
integral = toNumber <$> some d P.<?> "integral"
where
toNumber = foldl' (\a b -> a * 10 + b) 0
d = P.tokenPrim
(\c -> show [c])
(\pos c _cs -> P.updatePosChar pos c)
f
f '0' = Just 0
f '1' = Just 1
f '2' = Just 2
f '3' = Just 3
f '4' = Just 4
f '5' = Just 5
f '6' = Just 6
f '7' = Just 7
f '8' = Just 8
f '9' = Just 9
f _ = Nothing
-- | Greedily munch characters while predicate holds.
-- Require at least one character.
munch1
:: P.Stream s m Char
=> (Char -> Bool)
-> P.ParsecT s u m String
munch1 = some . P.satisfy
-- | Greedely munch characters while predicate holds.
-- Always succeeds.
munch
:: P.Stream s m Char
=> (Char -> Bool)
-> P.ParsecT s u m String
munch = many . P.satisfy