title: Is "List" specially handled in Haskell's pattern matching?
body: <p>I am a newbie in Haskell and hope this question is not silly.</p>
  
  <p>I have seen so much example that when I am having a list, I am able to match and bind "composition element" of the list to individual variable:</p>
  
  <pre><code>listSizeDesc :: [a] -&gt; String
  listSizeDesc [] = "Emtpy"
  listSizeDesc (x:xs) = "Something inside"
  </code></pre>
  
  <p>However, I tried to do something like:</p>
  
  <pre><code>foo :: Int -&gt; String
  foo 0 = "Zero"
  foo (n - 1) = "next number is " ++ show n
  </code></pre>
  
  <p>It doesn't work.  </p>
  
  <p>It seems to me that both (n-1) and (x:xs) describe how the argument is "created" and bind the "component" to an argument.  Is the way List matched specially designed for ease of recursion?  Coz it seems to me this matching / argument-binding logic doesn't apply to other functions except (:).</p>