After doing some pragmatic tests, it seems that neither the arrow preprocessor nor GHC&#39;s builtin one generate / optimize to the (***) combinator.<div><br></div><div>For example,</div><div><br></div><div>p = proc (x,y) -&gt; do</div>
<div>  x&#39; &lt;- f &lt;- x</div><div>  y&#39; &lt;- g &lt;- y</div><div>  return (x&#39;,y&#39;)</div><div><br></div><div>is equivalent to</div><div><br></div><div>p = f *** g</div><div><br></div><div>But I have the impression this kind of rewrites is not being done? Is it possible to provide rewrite rules for arrows?</div>
<div><br></div><div>Since *** is a method of the arrow type class, it might have a more optimal implementation.</div><div><br></div><div>I haven&#39;t looked at the arrow preprocessor or GHC&#39;s code  yet, but comments are welcome, I might see things wrongly.<br>
</div><div><br></div><div>Cheers,</div><div>Peter</div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br></div><div><br><div><br><div><br></div></div></div>