title: How does variable binding work with recursion in Haskell?
body: <p>I was reading about Haskell and it stated that once a variable is bound to an expression it cannot be rebound for example</p>
  
  <pre><code>x = 10
  x = 11
  
  Assign.hs:2:1: error:
      Multiple declarations of ‘x’
      Declared at: Assign.hs:1:1
                   Assign.hs:2:1
  </code></pre>
  
  <p>So if this is the case... how is recursion working where the same variable keeps getting bound to other things? For example</p>
  
  <pre><code>drop n xs = if n &lt;= 0 || null xs
                then xs
                else drop (n-1) (tail xs)
  </code></pre>
  
  <p>the variable <code>n</code>... is being bound again and again every time the function recurses. Why is this allowed?</p>
  
  <p>Also if you guys could tell me some key words to search for so I can learn more about this myself I'd highly appreciate it.</p>