Thanks Neil.&nbsp; How do I add in another ~10 computations, or map a list of a 100 computations to the same input?<br><br>Isn't there a way to do this without one computation having to be aware of the other?&nbsp; <br><br>This feels like a situation Parsec users would find themselves in all the time.&nbsp; When you have a bunch of parsers in a 'choice', does the start of the input stream linger until the last parser is executed?
<br><br>Thanks,<br>Greg<br><br><br><div><span class="gmail_quote">On 3/27/06, <b class="gmail_sendername">Neil Mitchell</b> &lt;<a href="mailto:ndmitchell@gmail.com">ndmitchell@gmail.com</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi,<br><br>&gt; Here would be a better example then.<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; f lst = show (sum (filter (&gt; 1) lst), sum (filter (&gt; 2) lst))<br><br>I suspected that you actually wanted to do something &quot;cleverer&quot; with
<br>the list, for the sake of argument, I'm going to change &gt;1 to p1 and<br>&gt;2 to p2 - to show how this can be done in the general case. With the<br>specific information you know about &gt;1 vs &gt;2 you can do better, but
<br>this gets across the general point:<br><br>f lst = show (sumPairs (&gt;1) (&gt;2) lst)<br><br>sumPairs :: (Int -&gt; Bool) -&gt; (Int -&gt; Bool) -&gt; [Int] -&gt; (Int, Int)<br>sumPairs p1 p2 [] = (0, 0)<br>sumPairs p1 p2 (x:xs) = (add p1 a, add p2 b)
<br>&nbsp;&nbsp;&nbsp;&nbsp;where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (a,b) = sumPairs xs<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; add pred value = if pred x then x+value else value<br><br>[Untested, something like this should work]<br><br>You can actually arrive at this solution entirely be reasoning on the
<br>program, i.e. not coming up with a fresh definition.<br><br>The above code essentially follows your imperative pseudo code - I<br>think its constant space, but I'm not too sure...<br><br>Thanks<br><br>Neil<br></blockquote>
</div><br>