module Domain.Attoparsec.General where import Data.Attoparsec.Text import qualified Data.Text as Text import Domain.Prelude hiding (takeWhile) only :: Parser a -> Parser a only :: forall a. Parser a -> Parser a only Parser a parser = Parser () skipSpace forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser a parser forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* Parser () skipSpace forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* forall t. Chunk t => Parser t () endOfInput commaSeparated :: Parser a -> Parser [a] commaSeparated :: forall a. Parser a -> Parser [a] commaSeparated Parser a parser = forall (f :: * -> *) a s. Alternative f => f a -> f s -> f [a] sepBy Parser a parser Parser Char comma comma :: Parser Char comma :: Parser Char comma = Parser () skipSpace forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Char -> Parser Char char Char ',' forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* Parser () skipSpace inParens :: Parser b -> Parser b inParens :: forall a. Parser a -> Parser a inParens Parser b parser = do Char -> Parser Char char Char '(' Parser () skipSpace b a <- Parser b parser Parser () skipSpace Char -> Parser Char char Char ')' forall (m :: * -> *) a. Monad m => a -> m a return b a inSquareBrackets :: Parser b -> Parser b inSquareBrackets :: forall a. Parser a -> Parser a inSquareBrackets Parser b parser = do Char -> Parser Char char Char '[' Parser () skipSpace b a <- Parser b parser Parser () skipSpace Char -> Parser Char char Char ']' forall (m :: * -> *) a. Monad m => a -> m a return b a skipSpace1 :: Parser () skipSpace1 :: Parser () skipSpace1 = Parser Char space forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser () skipSpace name :: (Char -> Bool) -> Parser Text name :: (Char -> Bool) -> Parser Text name Char -> Bool firstCharPred = do Char a <- (Char -> Bool) -> Parser Char satisfy Char -> Bool firstCharPred Text b <- (Char -> Bool) -> Parser Text takeWhile (\Char a -> Char -> Bool isAlphaNum Char a Bool -> Bool -> Bool || Char a forall a. Eq a => a -> a -> Bool == Char '\'' Bool -> Bool -> Bool || Char a forall a. Eq a => a -> a -> Bool == Char '_') forall (m :: * -> *) a. Monad m => a -> m a return (Char -> Text -> Text Text.cons Char a Text b) ucName :: Parser Text ucName :: Parser Text ucName = (Char -> Bool) -> Parser Text name Char -> Bool isUpper lcName :: Parser Text lcName :: Parser Text lcName = (Char -> Bool) -> Parser Text name (\Char a -> Char -> Bool isLower Char a Bool -> Bool -> Bool || Char a forall a. Eq a => a -> a -> Bool == Char '_')