I like the simplicity of th Cartesian class, including definability of dup, swap, lAssoc, rAssoc, first, and second.<br><br>I&#39;m missing the significance of<br><br>&gt; But IIRC, (&amp;&amp;&amp;) does impose an &quot;order of side effects&quot; on the arguments, so Arrows are more general (less restrictive) than cartesian categories. 
<br><br>Is it just that you&#39;re wondering with what class to associate the fst/&amp;&amp;&amp; and snd/&amp;&amp;&amp; laws?<br><br>&nbsp;&nbsp;&nbsp; fst . (f &amp;&amp;&amp; g) = f<br>&nbsp;&nbsp;&nbsp; snd . (f &amp;&amp;&amp; g) = g<br><br>- Conal
<br><br><div><span class="gmail_quote">On 10/18/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; DeepArrow could benefit from suggestions (perhaps refactoring), and I would<br>&gt; appreciate such input.&nbsp;&nbsp;In any case, I imagine there&#39;s some rich, useful<br>&gt; structure between Category &amp; Arrow, and now would be a great time to explore
<br>&gt; it before settling on a new class hierarchy.<br><br>DeepArrow looks pretty much like a category corresponding to Arrows<br>(&quot;Freyd category&quot; but I don&#39;t really know what that is) to me (without a<br>
functor&nbsp;&nbsp;arr&nbsp;&nbsp;that embeds the category of Haskell functions).<br><br>I mean, Arrows are just computations a ~&gt; b that allow you to keep<br>around temporary variables with&nbsp;&nbsp;first&nbsp;&nbsp;and&nbsp;&nbsp;second . Unfortunately, the<br>Arrow class does not mention all the needed morphisms to do that since
<br>the&nbsp;&nbsp;arr&nbsp;&nbsp;function automatically carries most of them over from the<br>category of Haskell functions. I have the feeling that DeepArrow wants<br>to list exactly those necessary morphisms. Perhaps there is something<br>
more to DeepArrows, due to the normal function arrows in types, but<br>maybe not since perhaps the only thing they can act on are tuples.<br><br>In any case, I&#39;d recommend rethinking DeepArrows, maybe there&#39;s some
<br>well-known category corresponding to them. For starters, there are<br>cartesian categories, i.e. categories with products:<br><br>&nbsp;&nbsp; class Cartesian cat where<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fst&nbsp;&nbsp; :: cat (a,b) a<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snd&nbsp;&nbsp; :: cat (a,b) b
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(&amp;&amp;&amp;) :: cat c a -&gt; cat c b -&gt; cat c (a,b)<br><br>with the conditions<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fst . (f &amp;&amp;&amp; g) = f<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;snd . (f &amp;&amp;&amp; g) = g<br><br>Besides fstA and sndA, this gives the morphisms
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dupA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= id &amp;&amp;&amp; id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- the diagonal<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;swapA f&nbsp;&nbsp; = snd f &amp;&amp;&amp; fst f<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lAssocA f = (fst f &amp;&amp;&amp; fst (snd f)) &amp;&amp;&amp; snd (snd f)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rAssocA f = fst (fst f) &amp;&amp;&amp; (fst (snd f) &amp;&amp;&amp; snd f)
<br><br>Interestingly, we already get<br><br>&nbsp;&nbsp; first :: Cartesian cat =&gt; cat a b -&gt; cat (a,d) (b,d)<br>&nbsp;&nbsp; first f = (f . fst &amp;&amp;&amp; id . snd)<br><br>and&nbsp;&nbsp;second&nbsp;&nbsp;and that would be everything we need for arrows (besides
<br>arr ). But IIRC, (&amp;&amp;&amp;) does impose an &quot;order of side effects&quot; on the<br>arguments, so Arrows are more general (less restrictive) than cartesian<br>categories. So, it&#39;s some (pre?)monoidal category with extra stuff
<br>(Freyd?), I don&#39;t know :)<br><br>Also, I don&#39;t know what to do with the Haskell function arrows in the<br>objects (= arguments to ~&gt;) of DeepArrow.<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>