module CabalGild.Unstable.Extra.CharParsing where

import qualified Distribution.Compat.CharParsing as Parse
import qualified Distribution.Parsec as Parsec

-- | Wraps the given parser in curly braces.
braces :: (Parsec.CabalParsing m) => m a -> m a
braces :: forall (m :: * -> *) a. CabalParsing m => m a -> m a
braces = m () -> m () -> m a -> m a
forall (m :: * -> *) bra ket a.
Applicative m =>
m bra -> m ket -> m a -> m a
Parse.between (String -> m ()
forall (m :: * -> *). CabalParsing m => String -> m ()
token String
"{") (String -> m ()
forall (m :: * -> *). CabalParsing m => String -> m ()
token String
"}")

-- | Wraps the given parser in parentheses.
parens :: (Parsec.CabalParsing m) => m a -> m a
parens :: forall (m :: * -> *) a. CabalParsing m => m a -> m a
parens = m () -> m () -> m a -> m a
forall (m :: * -> *) bra ket a.
Applicative m =>
m bra -> m ket -> m a -> m a
Parse.between (String -> m ()
forall (m :: * -> *). CabalParsing m => String -> m ()
token String
"(") (String -> m ()
forall (m :: * -> *). CabalParsing m => String -> m ()
token String
")")

-- | Parses the given string followed by any amount of blank space.
token :: (Parsec.CabalParsing m) => String -> m ()
token :: forall (m :: * -> *). CabalParsing m => String -> m ()
token String
s = String -> m String
forall (m :: * -> *). CharParsing m => String -> m String
Parse.string String
s m String -> m () -> m ()
forall a b. m a -> m b -> m b
forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b
*> m ()
forall (m :: * -> *). CharParsing m => m ()
Parse.spaces