[Haskell-cafe] Need help with learning Parsec

Christian Maeder Christian.Maeder at dfki.de
Mon Jul 23 11:47:22 CEST 2012


Am 22.07.2012 17:21, schrieb C K Kashyap:
> I've updated the parser here -
> https://github.com/ckkashyap/LearningPrograms/blob/master/Haskell/Parsing/xml_3.hs
>
> The whole thing is less than 100 lines and it can handle comments as well.

This code is still not nice: Duplicate code in openTag and 
withoutExplictCloseTag.

The "toplevel-try" in
   try withoutExplictCloseTag <|>  withExplicitCloseTag
should be avoided by factoring out the common prefix.

Again, I would avoid notFollowedBy by using many1.

   tag <- try(char '<' >> many1 (letter <|> digit))

In quotedChar you do not only want to escape the quote but at least the 
backslash, too. You could allow to escape any character by a backslash 
using:
   quotedChar c =
     try (char '\\' >> anyChar) <|> noneOf [c, '\\']

Writing a separate parser stripLeadingSpaces is overkill. Just use
   "spaces >> parseXML"

(or apply "dropWhile isSpace" to the input string)

C.

[...]



More information about the Haskell-Cafe mailing list