spaces = skipMany space
parseString :: Parser LispVal
-parseString = do
- char '"'
- x <- many (noneOf "\"")
- char '"'
- return $ String x
+parseString = do char '"'
+ x <- many innerChar
+ char '"'
+ return $ String x
+ where innerChar = noneOf ['\\', '\"'] <|> escapeChar
+ escapeChar = do char '\\'
+ c <- oneOf "\""
+ return $ '\"'
parseAtom :: Parser LispVal
parseAtom = do
main = do
args <- getLine
putStrLn (readExpr args)
+ main