<div class="gmail_quote">On Fri, Feb 20, 2009 at 3:10 AM, Robert Vollmert <span dir="ltr">&lt;<a href="mailto:rvollmert-lists@gmx.net">rvollmert-lists@gmx.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="Ih2E3d">On Feb 20, 2009, at 06:07, Gene Arthur wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Kim-Ee Yeoh said:<br>
On the same note, does anyone have ideas<br>
for the following snippet? Tried the pointfree<br>
package but the output was useless.<br>
</blockquote>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
pointwise op (x0,y0) (x1,y1) = (x0 `op` x1, y0 `op` y1)<br>
</blockquote>
<br>
First sorry for the delay in getting to this.. been behind on<br>
projects so had some days of mail piled up. &nbsp;Here is what<br>
I came up with, using one arrow operator,<br>
so you would have to import: Control.Arrow ((***)) at minimum<br>
to use this solution:<br>
<br>
pointfree ::<br>
 &nbsp; forall t t1 c. (t -&gt; t1 -&gt; c) -&gt; (t, t1) -&gt; (t, t1) -&gt; (c, c)<br>
<br>
pointfree op &nbsp;=<br>
 &nbsp; &nbsp; curry $ (\(a,b) -&gt; a `op` b) &nbsp;*** (\(a,b) -&gt; a `op` b)<br>
<br>
examples of use, that were executed using:<br>
<br>
ghci -fglasgow-exts -farrows Control.Arrow<br>
<br>
*&gt;pointfree (*) (3,5) (12,12)<br>
<br>
(15,144)<br>
</blockquote>
<br></div>
That&#39;s not quite what pointwise above does, though. The following works using (***):<br>
<br>
tr :: ((a,b),(c,d)) -&gt; ((a,c),(b,d))<br>
tr ((x,y),(z,w)) = ((x,z),(y,w))<br></blockquote><div><br></div><div>tr = (fst *** fst) &amp;&amp;&amp; (snd *** snd)</div><div>&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<br>
diag :: (a -&gt; a -&gt; b) -&gt; (a -&gt; b)<br>
diag f x = f x x</blockquote><div><br></div><div>diag = join &nbsp;-- for Monad (-&gt;) a, in Control.Monad.Instances</div><div>&nbsp;</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<br>
pointfree :: (a -&gt; b -&gt; c) -&gt; (a,a) -&gt; (b,b) -&gt; (c,c)<br>
pointfree = curry . (. tr) . diag (***) . uncurry<br>
<br>
Do tr or diag exist in the libraries?<br>
<br>
Cheers<br><font color="#888888">
Robert</font><div><div></div><div class="Wj3C7c"><br>
<br>
_______________________________________________<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/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>