title: Alias for a function name has a different type signature. Why?
body: <pre><code>import Data.List (genericLength)
  
  len = genericLength
  
  :t genericLength
  genericLength :: (Num i) =&gt; [b] -&gt; i
  :t len
  len :: [b] -&gt; Integer
  </code></pre>
  
  <p>Why is the type of <code>len</code> different from type of <code>genericLength</code>? The intent here is to use a shorter alias for <code>genericLength</code>.</p>
  
  <p>Aren't functions first-class in haskell? Shouldn't giving another name for a function result in an identical function?</p>