title: Arrow without arr
body: <p>If we restrict our understanding of a category to be the usual <code>Category</code> class in Haskell:</p>
  
  <pre><code>class Category c where
    id :: c x x
    (&gt;&gt;&gt;) :: c x y -&gt; c y z -&gt; c x z
  </code></pre>
  
  <p>Then let's say that an <code>Arrow</code> is a <code>Category</code> which can additionally:</p>
  
  <pre><code>class Category c =&gt; Arrow c where
    (***) :: c x y -&gt; c x' y' -&gt; c (x,x') (y,y')
    (&amp;&amp;&amp;) :: c x y -&gt; c x y' -&gt; c x (y,y')
  </code></pre>
  
  <p>We can easily derive:</p>
  
  <pre><code>first :: c x y -&gt; c (x,z) (y,z)
  first a = a *** id
  
  second :: c x y -&gt; c (z,x) (z,y)
  second a = id *** a
  </code></pre>
  
  <p>Or we can derive <code>(***)</code> from <code>first</code> and <code>second</code>:</p>
  
  <pre><code>a1 *** a2 = first a1 &gt;&gt;&gt; second a2
  </code></pre>
  
  <p>We can also derive:</p>
  
  <pre><code>dup :: c x (x,x)
  dup = id &amp;&amp;&amp; id
  </code></pre>
  
  <p>Or we can derive <code>(&amp;&amp;&amp;)</code> given <code>dup</code> and <code>(***)</code>:</p>
  
  <pre><code>a1 &amp;&amp;&amp; a2 = dup &gt;&gt;&gt; (a1 *** a2)
  </code></pre>
  
  <hr>
  
  <p>What's my point and what's my question? It's this:</p>
  
  <p>What is <code>Arrow</code> without <code>arr</code>? It seems perfectly coherent and useful. Are there any arrow laws (aside from just category laws) that don't involve <code>arr</code> and remain intact here? And what does this all mean in category theory?</p>
  
  <hr>
  
  <p>I basically stole this question from reddit, but generalized and expounded on it:
  <a href="http://www.reddit.com/r/haskell/comments/2e0ane/category_with_fanout_and_split_but_not_an_arrow/">http://www.reddit.com/r/haskell/comments/2e0ane/category_with_fanout_and_split_but_not_an_arrow/</a> </p>