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