I am trying to understand State monad example15 at:<br><a href="http://www.haskell.org/all_about_monads/html/statemonad.html" target="_blank">http://www.haskell.org/all_about_monads/html/statemonad.html</a><br><br>Example 15 uses getAny that I don&#39;t understand at all how it works:<br>
<br>getAny :: (Random a) =&gt; State StdGen a<br>getAny = do g&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;- get<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (x,g&#39;) &lt;- return $ random g<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; put g&#39;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return x<br><br><br>Questions:<br>1) random has type:<br>
random :: (Random a, RandomGen g) =&gt; g -&gt; (a, g)<br><br>and for State monad:<br><br>return a = State (\s -&gt; (a, s))<br><br>then:<br>return (random g) = State (\s -&gt; ((a,g), s))<br><br>Is&nbsp; it correct?<br><br>2) What x and g&#39; will match to in:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do ...<br>&nbsp;&nbsp;&nbsp; (x,g&#39;) &lt;- return $ random g<br><br>which, as I understand equals to:&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; do ...<br>&nbsp;&nbsp;&nbsp; (x,g&#39;) &lt;- State (\s -&gt; ((a,g), s))<br><br>What x and g&#39; will match to in the last expression?<br>
<br>3) In general, in do expression (pseudo):<br>&nbsp;&nbsp;&nbsp; do { x &lt;- State (\s -&gt; (a, s)); ...}<br><br>What x will refer to? Will x stand for a whole lambda function: \s -&gt; (a, s) ?<br><br>4) How &#39;g &lt;- get&#39; works in this function (getAny) ?<br>
5) Why we need &#39;put g&#39;?<br><br>Thanks!<br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; <br>