gettext =  (many1 $ noneOf &quot;&gt;&lt;&quot;) &gt;&gt;= (return . Body)<div><br></div><div>works for your case.</div><div><br></div><div><br><br><div class="gmail_quote">On Thu, Jul 19, 2012 at 6:37 PM, Christian Maeder <span dir="ltr">&lt;<a href="mailto:Christian.Maeder@dfki.de" target="_blank">Christian.Maeder@dfki.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 19.07.2012 14:53, schrieb C K Kashyap:<div class="im"><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Dear gentle Haskellers,<br>
<br>
I was trying to whet my Haskell by trying out Parsec today to try and<br>
parse out XML. Here&#39;s the code I cam up with -<br>
<br>
I wanted some help with the &quot;gettext&quot; parser that I&#39;ve written. I had to<br>
do a dummy &quot;char &#39;  &#39;) in there just to satisfy the &quot;many&quot; used in the<br>
xml parser. I&#39;d appreciate it very much if someone could give me some<br>
feedback.<br>
</blockquote>
<br></div>
You don&#39;t want empty bodies! So use many1 in gettext.<br>
<br>
  gettext = fmap Body $ many1 $ letter &lt;|&gt; digit<br>
<br>
If you have spaces in your bodies, skip them or allow them with<br>
noneOf &quot;&lt;&quot;.<br>
<br>
HTH Christian<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<br>
<br>
data XML =  Node String [XML]<br>
           | Body String deriving Show<br>
<br>
gettext = do<br>
              x &lt;- many (letter &lt;|&gt; digit )<br>
              if (length x) &gt; 0 then<br>
                 return (Body x)<br>
              else (char &#39; &#39; &gt;&gt; (return $ Body &quot;&quot;))<br>
<br>
xml :: Parser XML<br>
xml = do {<br>
           name &lt;- openTag<br>
         ; innerXML &lt;- many innerXML<br>
         ; endTag name<br>
         ; return (Node name innerXML)<br>
          }<br>
<br>
innerXML = do<br>
          x &lt;- (try xml &lt;|&gt; gettext)<br>
          return x<br>
<br>
openTag :: Parser String<br>
openTag = do<br>
         char &#39;&lt;&#39;<br>
         content &lt;- many (noneOf &quot;&gt;&quot;)<br>
         char &#39;&gt;&#39;<br>
         return content<br>
<br>
endTag :: String -&gt; Parser String<br>
endTag str = do<br>
         char &#39;&lt;&#39;<br>
         char &#39;/&#39;<br>
         string str<br>
         char &#39;&gt;&#39;<br>
         return str<br>
<br>
h1 = parse xml &quot;&quot; &quot;&lt;a&gt;A&lt;/a&gt;&quot;<br>
h2 = parse xml &quot;&quot; &quot;&lt;a&gt;&lt;b&gt;A&lt;/b&gt;&lt;/a&gt;&quot;<br>
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;<br>
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;<br>
<br>
Regards,<br>
Kashyap<br>
<br>
<br></div></div>
______________________________<u></u>_________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/<u></u>mailman/listinfo/haskell-cafe</a><br>
<br>
</blockquote>
<br>
<br>
______________________________<u></u>_________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/<u></u>mailman/listinfo/haskell-cafe</a><br>
</blockquote></div><br><br clear="all"><div><br></div>-- <br>I drink I am thunk.<br>
</div>