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> - Conal<br><br><div><span class="gmail_quote">On 10/22/07, <b class="gmail_sendername">apfelmus</b> <<a href="mailto:firstname.lastname@example.org">email@example.com</a>> 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>> I like the simplicity of th Cartesian class, including definability of dup,<br>> swap, lAssoc, rAssoc, first, and second.<br>><br>> I'm missing the significance of<br>><br>>> But IIRC, (&&&) does impose an "order of side effects" on the arguments,
<br>> so Arrows are more general (less restrictive) than cartesian categories.<br>><br>> Is it just that you're wondering with what class to associate the fst/&&&<br>> and snd/&&& laws?
<br>><br>> fst . (f &&& g) = f<br>> snd . (f &&& g) = g<br><br>Exactly. They often don't hold for Arrows but are taken granted for<br>Cartesian categories. So, using (&&&) as primitive is - despite its
<br>elegance - not the right thing to do. (That's also why Arrows have first<br>and second as primitives even when (&&&) 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>