<div dir="ltr"><div><div>And here's the arrow implementation <br><br></div>(pred1 &&& pred2) >>> uncurry (&&)<br><br></div><div>You need Data.Tuple (for uncurry) and Data.Arrow.  <br><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 16, 2015 at 5:40 PM, Frerich Raabe <span dir="ltr"><<a href="mailto:raabe@froglogic.com" target="_blank">raabe@froglogic.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 2015-11-16 12:44, Mark Carter wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Suppose I want to use an argument twice, as for example in the expression:<br>
(\x -> (pred1 x) and (pred2 x))<br>
<br>
Is there a shorter way of doing this?<br>
</blockquote>
<br></span>
I suppose you meant to write '&&' instead of 'and'?<br>
<br>
You can write it in an applicative style as<br>
<br>
  (&&) <$> pred1 <*> pred2<br>
<br>
If you like, you can shorten that a bit using 'liftA2' as<br>
<br>
  liftA2 (&&) pred1 pred2<br>
<br>
but I personally tend to like the former version better.<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Frerich Raabe - <a href="mailto:raabe@froglogic.com" target="_blank">raabe@froglogic.com</a><br>
<a href="http://www.froglogic.com" rel="noreferrer" target="_blank">www.froglogic.com</a> - Multi-Platform GUI Testing</font></span><div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org" target="_blank">Beginners@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners</a><br>
</div></div></blockquote></div><br></div>