Exercises 3

This commit is contained in:
Yann Esposito (Yogsototh) 2013-07-17 22:30:02 +02:00
parent 7e377e2a32
commit 8f3af55a4e

15
y.hs
View file

@ -21,14 +21,17 @@ spaces = skipMany1 space
parseString :: Parser LispVal parseString :: Parser LispVal
parseString = do parseString = do
char '"' char '"'
x <- many ( (char '\\' >> char 'n' >> return '\n') x <- many $ strSpecialChar <|> noneOf "\""
<|> (char '\\' >> char 'r' >> return '\r')
<|> (char '\\' >> char 't' >> return '\t')
<|> (char '\\' >> anyChar)
<|> noneOf "\""
)
char '"' char '"'
return $ String x return $ String x
where
strSpecialChar = char '\\' >> do
x <- anyChar
case x of
'n' -> return '\n'
't' -> return '\t'
'r' -> return '\r'
_ -> return x
parseAtom :: Parser LispVal parseAtom :: Parser LispVal
parseAtom = do parseAtom = do