<div>Hi Igor,</div><div><br></div>You can create a new type for a -&gt; Bool with which you can compose to create complex filters. I find  that an elegant approach:<div><br></div><div><div>import Data.Monoid </div><div><br>

</div><div>newtype Filter a = Filter {</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>runFilter :: a -&gt; Bool </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div>

-- We can turn filter into a monoid, behaving like and. </div><div>instance Monoid (Filter a) where </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>mempty = Filter $ const True </div><div><span class="Apple-tab-span" style="white-space:pre">        </span>mappend (Filter a) (Filter b) = Filter $ \x -&gt; a x &amp;&amp; b x </div>

<div><br></div><div><br></div><div>andF :: Filter a -&gt; Filter a -&gt; Filter a </div><div>andF = mappend </div><div><br></div><div>-- We can also create or</div><div>orF :: Filter a -&gt; Filter a -&gt; Filter a</div>
<div>
orF (Filter a) (Filter b) = Filter $ \x -&gt; a x || b x</div><div><br></div><div>mkFilter :: (a -&gt; Bool) -&gt; Filter a </div><div>mkFilter = Filter</div><div><br></div><div>-- Some example filters </div><div>evenFilter = mkFilter even </div>

<div>lessThanHundred = mkFilter (&lt;100) </div><div><br></div><div>specificFilter :: Filter a -&gt; [a] -&gt; [a]</div><div>specificFilter xs ys = filter (runFilter xs) ys</div><div><br></div><div><br></div><div>-- get less then hundred and even</div>

<div>testa = specificFilter (evenFilter &lt;&gt; lessThanHundred) [1..1000]</div><div><br></div><div>-- get less then hundred or even </div><div>testb = specificFilter (evenFilter `orF` lessThanHundred) [1..1000]</div><div>

<br></div><div>Cheers,</div><div><br></div><div>Edgar</div><div><br><div class="gmail_quote">On Sun, Jul 7, 2013 at 7:26 PM, Igor Pinheiro Leão <span dir="ltr">&lt;<a href="mailto:ivpcl@cin.ufpe.br" target="_blank">ivpcl@cin.ufpe.br</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Hi Guys,<br>sorry in upsetting you again.<br>Is there a way in which I can filter one list of function, one function at time, to a list of elements, declaring this and only this function.<br>

<br>It would be exactly like this:<br>
<br>specifcFilter :: [(a-&gt;Bool)] -&gt; [a] -&gt; [a]<br><br>where for each element of type &#39;a&#39; on the second list it would exist a function on  the first list that would be applied to it filtering. <br><br></div>


Kind regards,<br></div>Igor<span class="HOEnZb"><font color="#888888"><br><div><div><div><div><br clear="all"><div><div><br>-- <br>Igor Vinícius<br>Graduando em Ciência da Computação<br>
</div></div></div></div></div></div></font></span></div>
<br>_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
<br></blockquote></div><br></div></div>