title: Does the Applicative interface provide power beyond the ability to lift multi-argument functions (in curried form) into a Functor?
body: <p>Applicatives are often presented as a way to lift multi-argument functions
  into a functor and apply functor values to it. But I wonder if there is some
  subtle additional power stemming from the fact that it can do so by lifting
  functions that return a function and applying the function arguments one at
  a time.</p>
  
  <p>Imagine instead we define an interface based on lifting functions whose argument is a tuple of arguments:</p>
  
  <pre><code># from Functor
  fmap :: (a -&gt; b) -&gt; Fa -&gt; Fb
  # from Applicative
  pure :: a -&gt; Fa
  
  # combine multiple functor values into a functor of a tuple
  tuple1 :: Fa -&gt; F(a)
  tuple2 :: Fa -&gt; Fb -&gt; F(a,b)
  tuple3 :: Fa -&gt; Fb -&gt; Fc -&gt; F(a,b,c)
  (etc ...)
  
  # lift multi-argument functions (that take a tuple as input)
  ap_tuple1 :: ((a) -&gt; b) -&gt; F(a) -&gt; Fb
  ap_tuple2 :: ((a,b) -&gt; c) -&gt; F(a,b) -&gt; Fc
  ap_tuple3 :: ((a,b,c) -&gt; d) -&gt; F(a,b,c) -&gt; Fd
  (etc ..)
  </code></pre>
  
  <p>Assume we had the corresponding tuple function defined for every sized tuple we may encounter.
  Would this interface be equally as powerful as the Applicative interface, given it allows for
  lifting/applying-to multi-argument functions BUT doesn't allow for lifting/applying-to functions
  that return a function? Obviously one can curry functions that take a tuple as an argument
  so they can be lifted in an applicative and one can uncurry functions that return a function
  in order to lift them into hypothetical implementation above. But to my mind there is a subtle
  difference in power. Is there any difference? (Assuming the question even makes sense)</p>