+parseString = do char '"'
+ x <- many innerChar
+ char '"'
+ return $ String x
+ where innerChar = noneOf ['\\', '\"'] <|> escapeChar
+ escapeChar = do char '\\'
+ c <- oneOf ['\"', '\\', 'n', 'r', 't', 'f']
+ return $ case c of
+ '\"' -> '\"'
+ '\\' -> '\\'
+ 'n' -> '\n'
+ 'r' -> '\r'
+ 't' -> '\t'
+ 'f' -> '\f'