( isCtl -- Char -> Bool
, isSeparator -- Char -> Bool
, isChar -- Char -> Bool
+ , isToken -- Char -> Bool
+ , listOf -- Parser a -> Parser [a]
, token -- Parser String
, lws -- Parser String
, text -- Parser Char
| otherwise = False
+isToken :: Char -> Bool
+isToken c = not (isCtl c || isSeparator c)
+
+
+listOf :: Parser a -> Parser [a]
+listOf p = do many lws
+ sepBy p (do many lws
+ char ','
+ many lws)
+
+
token :: Parser String
-token = many1 $ satisfy (\ c -> not (isCtl c || isSeparator c))
+token = many1 $ satisfy isToken
lws :: Parser String