title: Generalization of the `Functor` class to become a `MultiFunctor`?
body: <p>I am learning from the "<a href="https://arxiv.org/pdf/1403.0749.pdf" rel="nofollow noreferrer">Free Applicative Functors</a>". Surely, the question I am going to ask is kind of aside with respect to main idea of the paper, but still...</p>
  
  <p>...on the page 6 there is an attempt to generalize <code>Functor</code> to <code>MultiFunctor</code>:</p>
  
  <pre><code>class Functor f ⇒ MultiFunctor f where
      fmap0 :: a → f a
      fmap1 :: (a → b) → f a → f b
      fmap1 = fmap
      fmap2 :: (a → b → c) → f a → f b → f c
      ...
  </code></pre>
  
  <p>I can not see how this definition is justified from the category theory's viewpoint: <code>fmap2</code> seems to be just a bifunctor, i.e. a functor defined on a <a href="https://en.wikipedia.org/wiki/Product_category" rel="nofollow noreferrer">product category</a>. By definition, product category is given by all possible ordered pairs of objects and morphisms are pairs as well, hence: <code>fmap2 :: (a -&gt; a', b -&gt; b') -&gt; (f a, f b) -&gt; (f a', f b')</code> looks and feels like more appropriate signature.</p>
  
  <p>I can understand the way of thinking standing behing the <code>(a -&gt; b -&gt; c) -&gt; f a -&gt; f b -&gt; f c</code> choice: it is just the most obvious way to take known <code>(a -&gt; b) -&gt; f a -&gt; f b</code> signature and force it to work with binary functions, rather then unary. But is<code>MultiFunctor</code> (given by the definition above) actually a bi-/multifunctor in the sense that category theory expects it to be? </p>
  
  <p>P.S. The reason why I am curious is that it seems like one <strong>can't</strong> get to the <code>Applicative</code> by generalizing <code>Functor</code>, though paper states that one can. </p>