title: What does Functor's fmap tell about types?
body: <p>What does <code>f a</code> and <code>f b</code> tell me about its type?</p>
  
  <pre><code>class Functor f where
    fmap :: (a -&gt; b) -&gt; f a -&gt; f b
  </code></pre>
  
  <p>I think I get the idea behind standard instances of a functor. However I'm having hard time understanding what <code>f a</code> and <code>f</code> actually represent.</p>
  
  <p>I understand that <code>f a</code> and <code>f b</code> are just types and they must carry information what type constructor was used to create them and type arguments that were used. </p>
  
  <p>Is <code>f</code> a type constructor of kind <code>* -&gt; *</code>? Is <code>(-&gt;) r</code> a type constructor just like <code>Maybe</code> is?</p>