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 Parser () -> Parser Text a -> Parser Text a forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Parser Text a parser Parser Text a -> Parser () -> Parser Text a forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* Parser () skipSpace Parser Text a -> Parser () -> Parser Text a forall (f :: * -> *) a b. Applicative f => f a -> f b -> f a <* Parser () forall t. Chunk t => Parser t () endOfInput commaSeparated :: Parser Text a -> Parser Text [a] commaSeparated Parser Text a parser = Parser Text a -> Parser Text Char -> Parser Text [a] 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 Parser () -> Parser Text Char -> Parser Text Char forall (f :: * -> *) a b. Applicative f => f a -> f b -> f b *> Char -> Parser Text Char char Char ',' Parser Text Char -> Parser () -> Parser Text 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 ')' b -> Parser Text b 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 ']' b -> Parser Text b forall (m :: * -> *) a. Monad m => a -> m a return b a skipSpace1 :: Parser () skipSpace1 = Parser Text Char space Parser Text Char -> Parser () -> Parser () 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 Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '\'' Bool -> Bool -> Bool || Char a Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '_') Text -> Parser Text Text 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 Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '_')