btw I always find it amusing to play with interact and lazy IO:<div><br></div><div><div>guess :: [Char] -> [String] -> [String]</div><div>guess (c:cs) ~(i:is) = </div><div> "What's your guess, heads or tails ('h' or 't')?" : </div>
<div> (if [c]==i then "You win!" else "You lose!") :</div><div> guess cs is </div><div><br></div><div>main = do</div><div> gen <- getStdGen</div><div> let rs = randomRs (0,1::Int) gen</div><div>
cs = map ("ht"!!) rs</div><div> 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"><<a href="mailto:bugfact@gmail.com">bugfact@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">It always helps to put a Debug.Trace.trace:<div><br></div><div> 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>
>> fmap head getLine </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"><<a href="mailto:nowgate@yahoo.com" target="_blank">nowgate@yahoo.com</a>></span> wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div></div><div class="h5"><table cellspacing="0" cellpadding="0" border="0"><tbody><tr><td valign="top" style="font:inherit">
What is going wrong here?<br>
<br>Michael<br><br>=======<br><br>import System.Random<br><br>coinToss :: StdGen -> IO ()<br>coinToss gen = putStrLn "What's your guess, heads or tails ('h' or 't')?"<br> >> getChar<br>
>>= \c -> let (randInt, _) = randomR(0,1) gen :: (Int, StdGen)<br> in if c == ((!!) "ht" randInt) then putStrLn "You win!" else putStrLn "You lose!"<br>
<br>main = do<br> gen <- getStdGen<br> coinToss gen<br> gen
<- newStdGen<br> 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 href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>