title: How does forever monad work?
body: <p>How does forever monad work? </p>
  
  <pre><code>forever :: (Monad m) =&gt; m a -&gt; m b
  forever a = a &gt;&gt; forever a
  </code></pre>
  
  <p>If I write </p>
  
  <pre><code>main = forever $ putStrLn "SAD, I DON'T UNDERSTAND!"
  </code></pre>
  
  <p>forever gets IO (), this isn't function, how can forever repeatedly call putStrLn?</p>