:: [a] -> [a] -> [[a]] -package:split

manyTill p end applies action p zero or more times until action end succeeds, and returns the list of values returned by p. This can be used to scan comments:
simpleComment   = string "<!--" *> manyTill anyChar (string "-->")
(Note the overlapping parsers anyChar and string "-->". While this will work, it is not very efficient, as it will cause a lot of backtracking.)
manyTill' p end applies action p zero or more times until action end succeeds, and returns the list of values returned by p. This can be used to scan comments:
simpleComment   = string "<!--" *> manyTill' anyChar (string "-->")
(Note the overlapping parsers anyChar and string "-->". While this will work, it is not very efficient, as it will cause a lot of backtracking.) The value returned by p is forced to WHNF.
sepBy p sep applies zero or more occurrences of p, separated by sep. Returns a list of the values returned by p.
commaSep p  = p `sepBy` (char ',')
sepBy1 p sep applies one or more occurrences of p, separated by sep. Returns a list of the values returned by p.
commaSep p  = p `sepBy1` (char ',')
sepBy' p sep applies zero or more occurrences of p, separated by sep. Returns a list of the values returned by p. The value returned by p is forced to WHNF.
commaSep p  = p `sepBy'` (char ',')
sepBy1' p sep applies one or more occurrences of p, separated by sep. Returns a list of the values returned by p. The value returned by p is forced to WHNF.
commaSep p  = p `sepBy1'` (char ',')