<div dir="ltr"><blockquote style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;" class="gmail_quote">data FibState = F {previous, current :: Integer}<br>
fibState0 = F {previous = 1, current = 0}<br><br>
currentFib :: State FibState Integer<br>
currentFib = gets current<br><br>
nextFib :: State FibState Integer<br>
nextFib = do<br>
 &nbsp; &nbsp; &nbsp; &nbsp;F p c &lt;- get<br>
 &nbsp; &nbsp; &nbsp; &nbsp;let n = p+c<br>
 &nbsp; &nbsp; &nbsp; &nbsp;put (F c n)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;return n<br><br>
does that help?<br></blockquote>


<br>Thank you, Daniel, for responding so quickly. I&#39;ve played around with
your Fibonacci generator, but I&#39;m afraid I&#39;m not yet confident enough
with monads to get it to give me a meaningful answer. How do you seed
its state, and how would you go about printing out (for example) the
first 5 numbers in the Fibonacci sequence?<br><font color="#888888"><br>Mike<br></font><br><br><br><div class="gmail_quote">On Wed, Sep 17, 2008 at 1:39 PM, Daniel Fischer <span dir="ltr">&lt;<a href="mailto:daniel.is.fischer@web.de">daniel.is.fischer@web.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Am Mittwoch, 17. September 2008 20:05 schrieb Mike Sullivan:<br>
<div class="Ih2E3d">&gt; Hi All,<br>
&gt;<br>
&gt; As I&#39;m sure all Haskell beginners do, I&#39;m having a bit of a struggle<br>
&gt; wrapping my head around all of the uses for monads. My current frustration<br>
&gt; is trying to figure out how to use the state monad to attach some<br>
&gt; persistent state between different calls to a function. I have two<br>
&gt; questions that I would appreciate it if somebody could help me with.<br>
&gt;<br>
&gt; The ubiquitous state monad example for Haskell tutorials seems to be a<br>
&gt; random number generator, with a function like the following (from<br>
&gt; <a href="http://www.haskell.org/all_about_monads/html/statemonad.html#example" target="_blank">http://www.haskell.org/all_about_monads/html/statemonad.html#example</a>):<br>
&gt;<br>
&gt; getAny :: (Random a) =&gt; State StdGen a<br>
&gt; getAny = do g &nbsp; &nbsp; &nbsp;&lt;- get<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (x,g&#39;) &lt;- return $ random g<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; put g&#39;<br>
&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return x<br>
&gt;<br>
&gt; My first question is very basic, but here it goes: I see it everywhere, but<br>
&gt; what does the &quot;=&gt;&quot; signify? Specifically, in this example what does<br>
&gt; &quot;(Random a) =&gt;&quot; do in the type signature?<br>
<br>
</div>It describes a required context, here it means &quot;for any type &#39;a&#39; which is an<br>
instance of the typeclass Random, getAny has the type State StdGen a&quot;.<br>
<div class="Ih2E3d"><br>
&gt;<br>
&gt; My second question is more of a request, I suppose. I think it would be<br>
&gt; useful to get another example that does not have the added complications of<br>
&gt; dealing with the Random package, and saves more than one piece of data as<br>
&gt; state. How would one go about (for example) creating a Fibonacci sequence<br>
&gt; generator that saves the last state, such that on each call it returns the<br>
&gt; next number in the Fibonacci sequence?<br>
<br>
</div>data FibState = F {previous, current :: Integer}<br>
fibState0 = F {previous = 1, current = 0}<br>
<br>
currentFib :: State FibState Integer<br>
currentFib = gets current<br>
<br>
nextFib :: State FibState Integer<br>
nextFib = do<br>
 &nbsp; &nbsp; &nbsp; &nbsp;F p c &lt;- get<br>
 &nbsp; &nbsp; &nbsp; &nbsp;let n = p+c<br>
 &nbsp; &nbsp; &nbsp; &nbsp;put (F c n)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;return n<br>
<br>
does that help?<br>
<br>
&gt;<br>
&gt; Thank you,<br>
&gt; Mike<br>
<br>
Cheers,<br>
<font color="#888888">Daniel<br>
</font></blockquote></div><br></div>