`innerChar` matches a char that is not a backslash or a quote. If it is
either, it will match a backslash, capture a following quote and lift a
quote char into the `innerChar` monad.
This will not support anything other than quote after the backslash char.
x <- many innerChar
char '"'
return $ String x
- where innerChar = noneOf "\""
+ where innerChar = noneOf ['\\', '\"'] <|> escapeChar
+ escapeChar = do char '\\'
+ c <- oneOf "\""
+ return $ '\"'
parseAtom :: Parser LispVal
parseAtom = do