Why dollar ($) operator is so complex in GHC 8.0.1?
<pre><code>Prelude&gt; :i ($)
($) ::
  forall (r :: GHC.Types.RuntimeRep) a (b :: TYPE r).
  (a -&gt; b) -&gt; a -&gt; b
        -- Defined in ‘GHC.Base’
infixr 0 $
</code></pre>

<p>How is it different from <code>(a -&gt; b) -&gt; a -&gt; b</code>? Is there any <code>b</code> that does not fit the new type signature?</p>