title: What are these explicit "forall"s doing?
body: <p>What is the purpose of the <code>forall</code>s in this code?</p>
  
  <pre><code>class  Monad m  where
      (&gt;&gt;=)       :: forall a b. m a -&gt; (a -&gt; m b) -&gt; m b
      (&gt;&gt;)        :: forall a b. m a -&gt; m b -&gt; m b
          -- Explicit for-alls so that we know what order to
          -- give type arguments when desugaring
  </code></pre>
  
  <p>(some code omitted).  This is from the code for <a href="http://hackage.haskell.org/packages/archive/base/latest/doc/html/src/GHC-Base.html#Monad">Monads</a>.</p>
  
  <hr>
  
  <p>My background:  I don't really understand <code>forall</code> or when Haskell has them implicitly.</p>
  
  <p>Also, and it may not be significant, but GHCi allows me to omit the <code>forall</code> when giving <code>&gt;&gt;</code> a type:</p>
  
  <pre><code>Prelude&gt; :t (&gt;&gt;) :: Monad m =&gt; m a -&gt; m b -&gt; m b
  (&gt;&gt;) :: Monad m =&gt; m a -&gt; m b -&gt; m b
    :: (Monad m) =&gt; m a -&gt; m b -&gt; m b
  </code></pre>
  
  <p>(no error).</p>