<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Thanks for the tip, and the lazy example.<br>
<br>
I think I'm finally beginning to "get" monads, so I decided to test my
understanding with this small example. So far so good, except for that
little bump in the road.<br>
<br>
Onward and upward.<br>
<br>
Michael<br><br><br>--- On <b>Sun, 10/11/09, Peter Verswyvelen <i>&lt;bugfact@gmail.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Peter Verswyvelen &lt;bugfact@gmail.com&gt;<br>Subject: Re: [Haskell-cafe] Simple program. Simple problem?<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: haskell-cafe@haskell.org<br>Date: Sunday, October 11, 2009, 6:42 PM<br><br><div id="yiv1856778536">btw I always find it amusing to play with interact and lazy IO:<div><br></div><div><div>guess :: [Char] -&gt; [String] -&gt; [String]</div><div>guess (c:cs) ~(i:is) =&nbsp;</div><div>&nbsp;&nbsp;"What's your guess, heads or tails ('h' or 't')?"&nbsp;:&nbsp;</div>
<div>&nbsp;&nbsp;(if [c]==i then "You win!" else "You lose!")&nbsp;:</div><div>&nbsp;&nbsp;guess cs is&nbsp;</div><div><br></div><div>main = do</div><div>&nbsp;&nbsp;gen &lt;- getStdGen</div><div>&nbsp;&nbsp;let rs = randomRs &nbsp;(0,1::Int) gen</div><div>
&nbsp;&nbsp; &nbsp; &nbsp;cs = map ("ht"!!) rs</div><div>&nbsp;&nbsp;interact $ unlines . guess cs . lines</div><div><br></div><div><br></div><br><div class="gmail_quote">On Mon, Oct 12, 2009 at 12:24 AM, Peter Verswyvelen <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:bugfact@gmail.com" target="_blank" href="/mc/compose?to=bugfact@gmail.com">bugfact@gmail.com</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;">It always helps to put a Debug.Trace.trace:<div><br></div><div>&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;in if trace (show (fromEnum c)) $ c == ((!!) "ht" randInt) then p</div>
<div><br></div><div><div class="im"><div>What's your guess, heads or tails ('h' or 't')?</div>
<div>h</div></div><div>104</div><div class="im"><div>You win!</div><div>What's your guess, heads or tails ('h' or 't')?</div></div><div><b>10</b></div><div class="im"><div>You lose!</div><div>What's your guess, heads or tails ('h' or 't')?</div>

<div><br></div></div><div>So getChar also receives the linefeed character.</div><div><br></div><div>An easy way to get around this, is to use getLine instead and just use the first character, as in</div><div><br></div><div>
<div>
&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &gt;&gt; fmap head getLine&nbsp;</div><div><br></div><div>But of course we're hacking away here :-)<br></div><div><br></div></div><div class="gmail_quote"><div><div></div><div class="h5">On Mon, Oct 12, 2009 at 12:10 AM, michael rice <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:nowgate@yahoo.com" target="_blank" href="/mc/compose?to=nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;</span> wrote:<br>

</div></div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div class="h5"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit; -x-system-font: none;" valign="top">
What is going wrong here?<br>
<br>Michael<br><br>=======<br><br>import System.Random<br><br>coinToss :: StdGen -&gt; IO ()<br>coinToss gen = putStrLn "What's your guess, heads or tails ('h' or 't')?"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt; getChar<br>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&gt;= \c -&gt; let (randInt, _) = randomR(0,1) gen :: (Int, StdGen)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; in if c == ((!!) "ht" randInt) then putStrLn "You win!" else putStrLn "You lose!"<br>

<br>main = do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gen &lt;- getStdGen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; coinToss gen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gen
 &lt;- newStdGen<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; main<br><br>=======<br><br>[michael@localhost ~]$ runhaskell cointoss.hs<br>What's your guess, heads or tails ('h' or 't')?<br>h<br>You win!<br>What's your guess, heads or tails ('h' or 't')?<br>

You lose!<br>What's your guess, heads or tails ('h' or 't')?<br>h<br>You lose!<br>What's your guess, heads or tails ('h' or 't')?<br>You lose!<br>What's your guess, heads or tails ('h' or 't')?<br>

^Ccointoss.hs: cointoss.hs: interrupted<br>[michael@localhost ~]$ <br><br></td></tr></tbody></table><br>



      <br></div></div>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a rel="nofollow" ymailto="mailto:Haskell-Cafe@haskell.org" target="_blank" href="/mc/compose?to=Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a rel="nofollow" target="_blank" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></blockquote></td></tr></table><br>