title: How does the ST monad work?
body: <p>I understand that the ST monad is something like a little brother of IO, which in turn is the state monad with added <code>RealWorld</code> magic. I can picture states and I can picture that RealWorld is somehow put into IO, but every time I write a type signature of <code>ST</code> the <code>s</code> of the ST monad confuses me. </p>
  
  <p>Take, for example, <code>ST s (STArray s a b)</code>. How does the <code>s</code> work there? Is it just used to build up some artificial data dependency between computations without being able to be referenced like states in the state monad (due to the <code>forall</code>)?</p>
  
  <p>I'm just throwing out ideas and would really appreciate someone more knowledgeable than I to explain it to me.</p>