title: Why doesn't year=year+1 fail with stack overflow?
body: <p>year.hs:</p>
  
  <pre><code>year = year + 1
  
  main = print year
  </code></pre>
  
  <p>This is not a tail recursive call:</p>
  
  <pre><code>year = year + 1
  year = (year + 1) + 1
  year = ((year + 1) + 1) + 1
  ...
  </code></pre>
  
  <p>However <code>runhaskell year.hs</code> does not output anything, which indicates that it run into infinite loop.</p>
  
  <p>Does Haskell compiler make optimizations even for non tail recursive calls?</p>