i'm missing a piece of reasoning.  how about having &&& as primitive as in your Cartesian proposal, but without the fst/&&& and snd/&&& laws?  you could still introduce those laws in a subclass that does not include Arrow.
<br><br>&nbsp; - Conal<br><br><div><span class="gmail_quote">On 10/22/07, <b class="gmail_sendername">apfelmus</b> &lt;<a href="mailto:apfelmus@quantentunnel.de">apfelmus@quantentunnel.de</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;">
Conal Elliott wrote:<br>&gt; I like the simplicity of th Cartesian class, including definability of dup,<br>&gt; swap, lAssoc, rAssoc, first, and second.<br>&gt;<br>&gt; I&#39;m missing the significance of<br>&gt;<br>&gt;&gt; But IIRC, (&amp;&amp;&amp;) does impose an &quot;order of side effects&quot; on the arguments,
<br>&gt; so Arrows are more general (less restrictive) than cartesian categories.<br>&gt;<br>&gt; Is it just that you&#39;re wondering with what class to associate the fst/&amp;&amp;&amp;<br>&gt; and snd/&amp;&amp;&amp; laws?
<br>&gt;<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; fst . (f &amp;&amp;&amp; g) = f<br>&gt;&nbsp;&nbsp;&nbsp;&nbsp; snd . (f &amp;&amp;&amp; g) = g<br><br>Exactly. They often don&#39;t hold for Arrows but are taken granted for<br>Cartesian categories. So, using (&amp;&amp;&amp;) as primitive is - despite its
<br>elegance - not the right thing to do. (That&#39;s also why Arrows have first<br>and second as primitives even when (&amp;&amp;&amp;) makes them superfluous.).<br><br>Regards,<br>apfelmus<br><br>_______________________________________________
<br>Libraries mailing list<br><a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br><a href="http://www.haskell.org/mailman/listinfo/libraries">http://www.haskell.org/mailman/listinfo/libraries</a><br></blockquote>
</div><br>