module Text.ValveVKV.Internal where
import Text.Parsec
import Text.Read (readMaybe)

alphabet :: [Char]
alphabet :: [Char]
alphabet = [Char]
"'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_-+=.,#@!$%¨&*\\"

alphabetSpace :: [Char]
alphabetSpace :: [Char]
alphabetSpace = Char
' 'Char -> [Char] -> [Char]
forall a. a -> [a] -> [a]
:[Char]
alphabet

data ValveKeyValueEntry
   = KVObject (Pair [ValveKeyValueEntry])
   | KVString (Pair String)
   | KVInt (Pair Int)
   deriving (Int -> ValveKeyValueEntry -> [Char] -> [Char]
[ValveKeyValueEntry] -> [Char] -> [Char]
ValveKeyValueEntry -> [Char]
(Int -> ValveKeyValueEntry -> [Char] -> [Char])
-> (ValveKeyValueEntry -> [Char])
-> ([ValveKeyValueEntry] -> [Char] -> [Char])
-> Show ValveKeyValueEntry
forall a.
(Int -> a -> [Char] -> [Char])
-> (a -> [Char]) -> ([a] -> [Char] -> [Char]) -> Show a
showList :: [ValveKeyValueEntry] -> [Char] -> [Char]
$cshowList :: [ValveKeyValueEntry] -> [Char] -> [Char]
show :: ValveKeyValueEntry -> [Char]
$cshow :: ValveKeyValueEntry -> [Char]
showsPrec :: Int -> ValveKeyValueEntry -> [Char] -> [Char]
$cshowsPrec :: Int -> ValveKeyValueEntry -> [Char] -> [Char]
Show)

liftVKV :: (String -> String) -> ValveKeyValueEntry -> ValveKeyValueEntry
liftVKV :: ([Char] -> [Char]) -> ValveKeyValueEntry -> ValveKeyValueEntry
liftVKV [Char] -> [Char]
f (KVObject (Pair [Char]
name [ValveKeyValueEntry]
s)) = Pair [ValveKeyValueEntry] -> ValveKeyValueEntry
KVObject ([Char] -> [ValveKeyValueEntry] -> Pair [ValveKeyValueEntry]
forall a. [Char] -> a -> Pair a
Pair ([Char] -> [Char]
f [Char]
name) [ValveKeyValueEntry]
s)
liftVKV [Char] -> [Char]
f (KVInt (Pair [Char]
name Int
s)) = Pair Int -> ValveKeyValueEntry
KVInt ([Char] -> Int -> Pair Int
forall a. [Char] -> a -> Pair a
Pair ([Char] -> [Char]
f [Char]
name) Int
s)
liftVKV [Char] -> [Char]
f (KVString (Pair [Char]
name [Char]
s)) = Pair [Char] -> ValveKeyValueEntry
KVString ([Char] -> [Char] -> Pair [Char]
forall a. [Char] -> a -> Pair a
Pair ([Char] -> [Char]
f [Char]
name) [Char]
s)


data Pair a = Pair String a
    deriving (Int -> Pair a -> [Char] -> [Char]
[Pair a] -> [Char] -> [Char]
Pair a -> [Char]
(Int -> Pair a -> [Char] -> [Char])
-> (Pair a -> [Char])
-> ([Pair a] -> [Char] -> [Char])
-> Show (Pair a)
forall a. Show a => Int -> Pair a -> [Char] -> [Char]
forall a. Show a => [Pair a] -> [Char] -> [Char]
forall a. Show a => Pair a -> [Char]
forall a.
(Int -> a -> [Char] -> [Char])
-> (a -> [Char]) -> ([a] -> [Char] -> [Char]) -> Show a
showList :: [Pair a] -> [Char] -> [Char]
$cshowList :: forall a. Show a => [Pair a] -> [Char] -> [Char]
show :: Pair a -> [Char]
$cshow :: forall a. Show a => Pair a -> [Char]
showsPrec :: Int -> Pair a -> [Char] -> [Char]
$cshowsPrec :: forall a. Show a => Int -> Pair a -> [Char] -> [Char]
Show)

unpair :: Pair a -> (String, a)
unpair :: Pair a -> ([Char], a)
unpair (Pair [Char]
str a
a) = ([Char]
str,a
a)

entryParser :: Parsec String () ValveKeyValueEntry
entryParser :: Parsec [Char] () ValveKeyValueEntry
entryParser =
    Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () ValveKeyValueEntry
objParse Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () ValveKeyValueEntry
kvIntParse Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () ValveKeyValueEntry
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () ValveKeyValueEntry
kvStringParse

whitespaceCommon :: Parsec String () Char
whitespaceCommon :: Parsec [Char] () Char
whitespaceCommon = [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ (Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
"\t "

nameGrab :: Parsec String () String
nameGrab :: Parsec [Char] () [Char]
nameGrab = Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 (Parsec [Char] () Char -> Parsec [Char] () [Char])
-> Parsec [Char] () Char -> Parsec [Char] () [Char]
forall a b. (a -> b) -> a -> b
$ [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ (Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
alphabet

nameGrabSpace :: Parsec String () String
nameGrabSpace :: Parsec [Char] () [Char]
nameGrabSpace = Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 (Parsec [Char] () Char -> Parsec [Char] () [Char])
-> Parsec [Char] () Char -> Parsec [Char] () [Char]
forall a b. (a -> b) -> a -> b
$ [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ (Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
alphabetSpace

objParse :: Parsec String () ValveKeyValueEntry
objParse :: Parsec [Char] () ValveKeyValueEntry
objParse = do
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
extendWhitespace
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
commentParser
    [Char]
name <- Parsec [Char] () [Char]
nameGrab
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'{'
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    [ValveKeyValueEntry]
things <- Parsec [Char] () [ValveKeyValueEntry]
vkvParser
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'}'
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
commentParser)
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall (m :: * -> *) a. Monad m => a -> m a
return (ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry)
-> ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ Pair [ValveKeyValueEntry] -> ValveKeyValueEntry
KVObject (Pair [ValveKeyValueEntry] -> ValveKeyValueEntry)
-> Pair [ValveKeyValueEntry] -> ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ [Char] -> [ValveKeyValueEntry] -> Pair [ValveKeyValueEntry]
forall a. [Char] -> a -> Pair a
Pair [Char]
name [ValveKeyValueEntry]
things

extendWhitespace :: Parsec String () Char
extendWhitespace :: Parsec [Char] () Char
extendWhitespace = [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
commentParserParsec [Char] () Char
-> [Parsec [Char] () Char] -> [Parsec [Char] () Char]
forall a. a -> [a] -> [a]
:(Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
"\t\n " :: Parsec String () Char

commentParser :: Parsec String () Char
commentParser :: Parsec [Char] () Char
commentParser = do
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
whitespaceCommon
    Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'/'
    Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'/'
    Parsec [Char] () Char
anyLoop
    where
        anyLoop :: Parsec String () Char
        anyLoop :: Parsec [Char] () Char
anyLoop = do
            Char
thisChar <- Parsec [Char] () Char
forall s (m :: * -> *) u. Stream s m Char => ParsecT s u m Char
anyChar
            if Char
thisChar Char -> Char -> Bool
forall a. Eq a => a -> a -> Bool
== Char
'\n' then
                Char -> Parsec [Char] () Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
'\n'
            else do
                Parsec [Char] () Char
anyLoop
                Char -> Parsec [Char] () Char
forall (m :: * -> *) a. Monad m => a -> m a
return Char
thisChar

kvStringParse :: Parsec String () ValveKeyValueEntry
kvStringParse :: Parsec [Char] () ValveKeyValueEntry
kvStringParse = do
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
extendWhitespace
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
commentParser
    let stringGrab :: Parsec [Char] () [Char]
stringGrab = Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 (Parsec [Char] () Char -> Parsec [Char] () [Char])
-> Parsec [Char] () Char -> Parsec [Char] () [Char]
forall a b. (a -> b) -> a -> b
$ [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ (Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
alphabet :: Parsec String () String
    let names :: Parsec [Char] () [Char]
names = [Parsec [Char] () [Char]] -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice [Parsec [Char] () [Char]
nameGrab, Parsec [Char] () Char
-> Parsec [Char] () Char
-> Parsec [Char] () [Char]
-> Parsec [Char] () [Char]
forall s (m :: * -> *) t u open close a.
Stream s m t =>
ParsecT s u m open
-> ParsecT s u m close -> ParsecT s u m a -> ParsecT s u m a
between (Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"') (Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"') Parsec [Char] () [Char]
nameGrabSpace]
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
whitespaceCommon
    [Char]
name <- Parsec [Char] () [Char]
names
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 Parsec [Char] () Char
whitespaceCommon
    [Char]
value <- Parsec [Char] () [Char] -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try (Parsec [Char] () Char
-> Parsec [Char] () Char
-> Parsec [Char] () [Char]
-> Parsec [Char] () [Char]
forall s (m :: * -> *) t u open close a.
Stream s m t =>
ParsecT s u m open
-> ParsecT s u m close -> ParsecT s u m a -> ParsecT s u m a
between (Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"') (Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char Char
'"') Parsec [Char] () [Char]
nameGrabSpace) Parsec [Char] () [Char]
-> Parsec [Char] () [Char] -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a.
ParsecT s u m a -> ParsecT s u m a -> ParsecT s u m a
<|> Parsec [Char] () [Char] -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () [Char]
stringGrab
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall (m :: * -> *) a. Monad m => a -> m a
return (ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry)
-> ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ Pair [Char] -> ValveKeyValueEntry
KVString (Pair [Char] -> ValveKeyValueEntry)
-> Pair [Char] -> ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ [Char] -> [Char] -> Pair [Char]
forall a. [Char] -> a -> Pair a
Pair [Char]
name [Char]
value

kvIntParse :: Parsec String () ValveKeyValueEntry
kvIntParse :: Parsec [Char] () ValveKeyValueEntry
kvIntParse = do
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
extendWhitespace
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many Parsec [Char] () Char
commentParser
    let numberGrab :: Parsec [Char] () [Char]
numberGrab = Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 (Parsec [Char] () Char -> Parsec [Char] () [Char])
-> Parsec [Char] () Char -> Parsec [Char] () [Char]
forall a b. (a -> b) -> a -> b
$ [Parsec [Char] () Char] -> Parsec [Char] () Char
forall s (m :: * -> *) t u a.
Stream s m t =>
[ParsecT s u m a] -> ParsecT s u m a
choice ([Parsec [Char] () Char] -> Parsec [Char] () Char)
-> [Parsec [Char] () Char] -> Parsec [Char] () Char
forall a b. (a -> b) -> a -> b
$ (Char -> Parsec [Char] () Char)
-> [Char] -> [Parsec [Char] () Char]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap Char -> Parsec [Char] () Char
forall s (m :: * -> *) u.
Stream s m Char =>
Char -> ParsecT s u m Char
char [Char]
"0123456789" :: Parsec String () String
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
whitespaceCommon)
    [Char]
name <- Parsec [Char] () [Char]
nameGrab
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 Parsec [Char] () Char
whitespaceCommon
    [Char]
valueRaw <- Parsec [Char] () [Char]
numberGrab
    Parsec [Char] () Char -> Parsec [Char] () [Char]
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m [a]
many (Parsec [Char] () Char -> Parsec [Char] () Char
forall s u (m :: * -> *) a. ParsecT s u m a -> ParsecT s u m a
try Parsec [Char] () Char
extendWhitespace)
    let value :: Maybe Int
value = [Char] -> Maybe Int
forall a. Read a => [Char] -> Maybe a
readMaybe [Char]
valueRaw :: Maybe Int
    case Maybe Int
value of
        Just Int
x -> ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall (m :: * -> *) a. Monad m => a -> m a
return (ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry)
-> ValveKeyValueEntry -> Parsec [Char] () ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ Pair Int -> ValveKeyValueEntry
KVInt (Pair Int -> ValveKeyValueEntry) -> Pair Int -> ValveKeyValueEntry
forall a b. (a -> b) -> a -> b
$ [Char] -> Int -> Pair Int
forall a. [Char] -> a -> Pair a
Pair [Char]
name Int
x
        Maybe Int
Nothing -> [Char] -> Parsec [Char] () ValveKeyValueEntry
forall (m :: * -> *) a. MonadFail m => [Char] -> m a
fail [Char]
""

-- | The Parsec parser itself.

vkvParser :: Parsec String () [ValveKeyValueEntry]
vkvParser :: Parsec [Char] () [ValveKeyValueEntry]
vkvParser =
    Parsec [Char] () ValveKeyValueEntry
-> Parsec [Char] () [ValveKeyValueEntry]
forall s (m :: * -> *) t u a.
Stream s m t =>
ParsecT s u m a -> ParsecT s u m [a]
many1 Parsec [Char] () ValveKeyValueEntry
entryParser