From 8f3af55a4ee57f742699a4aae8e4be04a1153ce2 Mon Sep 17 00:00:00 2001 From: "Yann Esposito (Yogsototh)" Date: Wed, 17 Jul 2013 22:30:02 +0200 Subject: [PATCH] Exercises 3 --- y.hs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/y.hs b/y.hs index 4343646..064d8d5 100644 --- a/y.hs +++ b/y.hs @@ -21,14 +21,17 @@ spaces = skipMany1 space parseString :: Parser LispVal parseString = do char '"' - x <- many ( (char '\\' >> char 'n' >> return '\n') - <|> (char '\\' >> char 'r' >> return '\r') - <|> (char '\\' >> char 't' >> return '\t') - <|> (char '\\' >> anyChar) - <|> noneOf "\"" - ) + x <- many $ strSpecialChar <|> noneOf "\"" char '"' 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 = do