Dear gentle Haskellers,<div><br></div><div>I was trying to whet my Haskell by trying out Parsec today to try and parse out XML. Here's the code I cam up with - </div><div><div><br></div><div>I wanted some help with the "gettext" parser that I've written. I had to do a dummy "char ' ') in there just to satisfy the "many" used in the xml parser. I'd appreciate it very much if someone could give me some feedback.</div>
<div><br></div><div><br></div><div>data XML = Node String [XML]</div><div> | Body String deriving Show</div><div><br></div><div>gettext = do</div><div> x <- many (letter <|> digit )</div><div>
if (length x) > 0 then </div><div> return (Body x) </div><div> else (char ' ' >> (return $ Body ""))</div><div><br></div><div>xml :: Parser XML</div><div>
xml = do {</div><div> name <- openTag</div><div> ; innerXML <- many innerXML</div><div> ; endTag name</div><div> ; return (Node name innerXML) </div><div> } </div><div><br></div>
<div>innerXML = do</div><div> x <- (try xml <|> gettext)</div><div> return x</div><div><br></div><div>openTag :: Parser String</div><div>openTag = do</div><div> char '<'</div><div>
content <- many (noneOf ">")</div><div> char '>'</div><div> return content</div><div><br></div><div>endTag :: String -> Parser String</div><div>endTag str = do</div><div>
char '<'</div><div> char '/'</div><div> string str</div><div> char '>'</div><div> return str</div><div><br></div><div>h1 = parse xml "" "<a>A</a>"</div>
<div>h2 = parse xml "" "<a><b>A</b></a>"</div><div>h3 = parse xml "" "<a><b><c></c></b></a>"</div><div>h4 = parse xml "" "<a><b></b><c></c></a>"</div>
</div><div><br></div><div>Regards,</div><div>Kashyap</div>