title: Monoidal Functor is Applicative but where is the Monoid typeclass in the definition of Applicative?
body: <p>Applicative is a Monoidal Functor : </p>
  
  <pre><code>mappend :: f         -&gt; f   -&gt; f
  $       ::  (a -&gt; b) -&gt;   a -&gt;   b
  &lt;*&gt;     :: f(a -&gt; b) -&gt; f a -&gt; f b
  </code></pre>
  
  <p>But I don't see any reference about Monoid in the definition of the Applicative typeclass, could you tell me why ?</p>
  
  <p>Definition :</p>
  
  <pre><code>class Functor f =&gt; Applicative (f :: * -&gt; *) where
    pure :: a -&gt; f a
    (&lt;*&gt;) :: f (a -&gt; b) -&gt; f a -&gt; f b
    GHC.Base.liftA2 :: (a -&gt; b -&gt; c) -&gt; f a -&gt; f b -&gt; f c
    (*&gt;) :: f a -&gt; f b -&gt; f b
    (&lt;*) :: f a -&gt; f b -&gt; f a
    {-# MINIMAL pure, ((&lt;*&gt;) | liftA2) #-}
  </code></pre>
  
  <p>No mention of that structural Monoid is provided in this definition, but when you do </p>
  
  <pre><code>&gt; ("ab",(+1)) &lt;*&gt; ("cd", 5) 
  &gt;("abcd", 6)
  </code></pre>
  
  <p>You can clearly see the use of a Structural Monoid "(,) String" when implementing this instance of Applicative. </p>
  
  <p>Another example to show that a "Structural Monoid" is used :</p>
  
  <pre><code>Prelude Data.Monoid&gt; (2::Integer,(+1)) &lt;*&gt; (1::Integer,5)
  
  &lt;interactive&gt;:35:1: error:
      • Could not deduce (Monoid Integer) arising from a use of ‘&lt;*&gt;’
        from the context: Num b
          bound by the inferred type of it :: Num b =&gt; (Integer, b)
          at &lt;interactive&gt;:35:1-36
      • In the expression: (2 :: Integer, (+ 1)) &lt;*&gt; (1 :: Integer, 5)
        In an equation for ‘it’:
            it = (2 :: Integer, (+ 1)) &lt;*&gt; (1 :: Integer, 5)
  </code></pre>