<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">I see what you mean. I wasn't aware of
      the slowness of ++ <br>
      So your solution is just fine (? asking): you've just made a
      special takewhile that includes the matching predicate and handled
      the input like a pipeline. <br>
      It reminds a Unix command line, in the case: awk
      '/&lt;bug&gt;/,NR==0'&nbsp; | awk 'NR==1,/&lt;\/bug&gt;/'<br>
      <br>
      <br>
      On 07/16/12 12:10, C K Kashyap wrote:<br>
    </div>
    <blockquote
cite="mid:CAGdT1govMW+mimmMQ-XCEjzdWcx1UZRf+W11PdmuEMBAFSA01w@mail.gmail.com"
      type="cite">Thanks Carlos - you can import Text.Regex.Posix to get
      (=~)
      <div>Is there a way to avoid the (++) in your implementation? It
        has a linear time overhead.</div>
      <div><br>
      </div>
      <div>Regards,</div>
      <div>Kashyap</div>
      <div><br>
        <div class="gmail_quote">
          On Mon, Jul 16, 2012 at 1:36 AM, Carlos J. G. Duarte <span
            dir="ltr">&lt;<a moz-do-not-send="true"
              href="mailto:carlos.j.g.duarte@gmail.com" target="_blank">carlos.j.g.duarte@gmail.com</a>&gt;</span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000">
              <div>Looks good to me, but I'm just a beginner!<br>
                I used the isInfixOf from Data.List instead of =~ to run
                your example because the later wasn't working on my
                instalation. <br>
                <br>
                I've made a slightly variant using the break function:<br>
                <br>
                import Data.List
                <div class="im"><br>
                  startTag = "&lt;bug&gt;"<br>
                  endTag = "&lt;/bug&gt;"<br>
                  <br>
                </div>
                main = interact process<br>
                <br>
                process&nbsp; = unlines . extractSection startTag endTag .
                lines<br>
                extractSection start stop xs =<br>
                &nbsp; let (ls,rs) = break (isInfixOf stop) $ dropWhile (not
                . isInfixOf start) xs<br>
                &nbsp; in ls ++ take 1 rs
                <div>
                  <div class="h5"><br>
                    <br>
                    <br>
                    On 07/15/12 13:08, C K Kashyap wrote:<br>
                  </div>
                </div>
              </div>
              <blockquote type="cite">
                <div>
                  <div class="h5">Hi,
                    <div>I've written a small haskell program to extract
                      a section from a file between start and end
                      markers. For example, if I have a file such as
                      below -&nbsp;</div>
                    <div>
                      <div>a</div>
                      <div>b</div>
                      <div>c</div>
                      <div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;bug&gt;</div>
                      <div>d</div>
                      <div>e</div>
                      <div>f</div>
                      <div>&nbsp; &nbsp; &nbsp; &nbsp; &lt;/bug&gt;</div>
                      <div>g</div>
                      <div>h</div>
                      <div>i</div>
                    </div>
                    <div><br>
                    </div>
                    <div>I'd like to extract the contents between
                      &lt;bug&gt; and &lt;/bug&gt; (including the
                      markers).&nbsp;</div>
                    <div><br>
                    </div>
                    <div>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>startTag</span> <span>=</span> <span style="color:rgb(54,99,84)">"&lt;bug&gt;"</span>
<span>endTag</span> <span>=</span> <span style="color:rgb(54,99,84)">"&lt;/bug&gt;"</span>

<span>process</span>  <span>=</span> <span style="color:rgb(51,51,51)">unlines</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">specialTakeWhile</span> <span>(</span><span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">endTag</span><span>)</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">dropWhile</span> <span>(</span><span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">startTag</span><span>)</span> <span style="color:rgb(51,51,51)">.</span> <span style="color:rgb(51,51,51)">lines</span> 
        <span style="color:rgb(57,116,96)">where</span> <span style="color:rgb(51,51,51)">f</span> <span style="color:rgb(51,51,51)">t</span> <span style="color:rgb(51,51,51)">x</span> <span>=</span> <span style="color:rgb(51,51,51)">not</span> <span>(</span><span style="color:rgb(51,51,51)">x</span> <span style="color:rgb(51,51,51)">=~</span> <span style="color:rgb(51,51,51)">t</span><span>)</span> 
              <span style="color:rgb(51,51,51)">specialTakeWhile</span> <span>::</span> <span>(</span><span style="color:rgb(51,51,51)">a</span> <span>-&gt;</span> <span style="color:rgb(79,67,113)">Bool</span><span>)</span> <span>-&gt;</span> <span>[</span><span style="color:rgb(51,51,51)">a</span><span>]</span> <span>-&gt;</span> <span>[</span><span style="color:rgb(51,51,51)">a</span><span>]</span>
              <span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(79,67,113)">[]</span> <span>=</span> <span style="color:rgb(79,67,113)">[]</span>
              <span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span>(</span><span style="color:rgb(51,51,51)">x</span><span>:</span><span style="color:rgb(51,51,51)">xs</span><span>)</span> <span>=</span> <span style="color:rgb(57,116,96)">if</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(51,51,51)">x</span> <span style="color:rgb(57,116,96)">then</span> <span style="color:rgb(51,51,51)">x</span><span>:</span><span>(</span><span style="color:rgb(51,51,51)">specialTakeWhile</span> <span style="color:rgb(51,51,51)">ff</span> <span style="color:rgb(51,51,51)">xs</span><span>) <span style="color:rgb(57,116,96)">else</span> <span>[</span><span style="color:rgb(51,51,51)">x</span><span>]</span></span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>It'll be great if I could get some feedback on this.</span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>
</span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>Regards,</span></pre>
                      <pre style="text-align:left;font-size:13px;margin-bottom:0px;margin-top:0px"><span>Kashyap</span></pre>
                    </div>
                    <br>
                    <fieldset></fieldset>
                    <br>
                  </div>
                </div>
                <pre>_______________________________________________
Beginners mailing list
<a moz-do-not-send="true" href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a>
<a moz-do-not-send="true" href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a>
</pre>
              </blockquote>
              <br>
              <br>
            </div>
            <br>
            _______________________________________________<br>
            Beginners mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
            <a moz-do-not-send="true"
              href="http://www.haskell.org/mailman/listinfo/beginners"
              target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
            <br>
          </blockquote>
        </div>
        <br>
      </div>
    </blockquote>
    <br>
    <br>
  </body>
</html>