module Language.JSON.String.Parserimport Language.JSON.String.Tokensimport Text.Lexerimport Text.Parser%default totalprivatestringChar : Grammar JSONStringToken True CharstringChar = match JSTChar <|> match JSTSimpleEscape <|> match JSTUnicodeEscapeprivatequotedString : Grammar JSONStringToken True StringquotedString = let q = match JSTQuote in do chars <- between q q (many stringChar) eof pure $ pack charsexportparseString : List JSONStringToken -> Maybe StringparseString toks = case parse quotedString toks of Right (str, []) => Just str _ => Nothing
module Language.JSON.String.Parser
import Language.JSON.String.Tokens
import Text.Lexer
import Text.Parser
%default total
private
stringChar : Grammar JSONStringToken True Char
stringChar = match JSTChar
<|> match JSTSimpleEscape
<|> match JSTUnicodeEscape
private
quotedString : Grammar JSONStringToken True String
quotedString = let q = match JSTQuote in
do chars <- between q q (many stringChar)
eof
pure $ pack chars
export
parseString : List JSONStringToken -> Maybe String
parseString toks = case parse quotedString toks of
Right (str, []) => Just str
_ => Nothing