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&#39;s the code I cam up with - </div><div><div><br></div><div>I wanted some help with the &quot;gettext&quot; parser that I&#39;ve written. I had to do a dummy &quot;char &#39;  &#39;) in there just to satisfy the &quot;many&quot; used in the xml parser. I&#39;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 &lt;- many (letter &lt;|&gt; digit )</div><div>
             if (length x) &gt; 0 then </div><div>                return (Body x) </div><div>             else (char &#39; &#39; &gt;&gt; (return $ Body &quot;&quot;))</div><div><br></div><div>xml :: Parser XML</div><div>
xml = do {</div><div>          name &lt;- openTag</div><div>        ; innerXML &lt;- many innerXML</div><div>        ; endTag name</div><div>        ; return (Node name innerXML) </div><div>         } </div><div><br></div>
<div>innerXML = do</div><div>         x &lt;- (try xml &lt;|&gt; gettext)</div><div>         return x</div><div><br></div><div>openTag :: Parser String</div><div>openTag = do</div><div>        char &#39;&lt;&#39;</div><div>
        content &lt;- many (noneOf &quot;&gt;&quot;)</div><div>        char &#39;&gt;&#39;</div><div>        return content</div><div><br></div><div>endTag :: String -&gt; Parser String</div><div>endTag str = do</div><div>
        char &#39;&lt;&#39;</div><div>        char &#39;/&#39;</div><div>        string str</div><div>        char &#39;&gt;&#39;</div><div>        return str</div><div><br></div><div>h1 = parse xml &quot;&quot; &quot;&lt;a&gt;A&lt;/a&gt;&quot;</div>
<div>h2 = parse xml &quot;&quot; &quot;&lt;a&gt;&lt;b&gt;A&lt;/b&gt;&lt;/a&gt;&quot;</div><div>h3 = parse xml &quot;&quot; &quot;&lt;a&gt;&lt;b&gt;&lt;c&gt;&lt;/c&gt;&lt;/b&gt;&lt;/a&gt;&quot;</div><div>h4 = parse xml &quot;&quot; &quot;&lt;a&gt;&lt;b&gt;&lt;/b&gt;&lt;c&gt;&lt;/c&gt;&lt;/a&gt;&quot;</div>
</div><div><br></div><div>Regards,</div><div>Kashyap</div>