title: Some questions about monads in Haskell
body: <p>I'm learning about monads and have a few questions.</p>
  
  <p>This is where I am right now. Please correct me where I am wrong.</p>
  
  <ul>
  <li><p>The <code>&gt;&gt;=</code> symbol is an infix operator. Infix operators are functions that take two arguments (left-hand side and right-hand side) and return a value.</p></li>
  <li><p>The <code>&gt;&gt;=</code> symbol is called the bind operator and has signature <code>Monad m =&gt; m t -&gt; (t -&gt; m u) -&gt; m u</code>. However, the types don't seem to line up here. We get a value of type <code>m t</code> and the second argument is a function that takes a <code>t</code>. (I don't see how to connect the dots.)</p></li>
  <li><p>This must mean that the bind function is somehow able to remove the <code>m</code> from the <code>m t</code> in order to get the <code>t</code> and pass it to the function.</p></li>
  </ul>
  
  <p>Here are my questions:</p>
  
  <ul>
  <li><p>Is the ability to remove the <code>m</code> from <code>m t</code> something that is only possible inside such a bind operator. Does this bind operator have some special priviliges or something?</p></li>
  <li><p>What does it have to do with state changes? I understand (I think) that the goal of monads is to 'wrap' side-effects so that they are isolated from the rest of the program. But what is the role of the bind operator in this?</p></li>
  </ul>