<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">OK, then there's also an implicit *in* after the *let* in this code. Must the implicit (or explicit) *in* actually use the calculated value(s)?<br><br>And, the monad can "continue on" after the *let* (with or without the *in*) as below, i.e., the *let* needn't be the last statement in the *do*?<br><br>main = do<br>&nbsp; gen &lt;- getStdGen<br>&nbsp; let code = genCode gen<br>&nbsp; putStrLn $ "Code is " ++ show code<br>&nbsp; putStrLn "..."<br><br><br>Michael<br><br><br>--- On <b>Tue, 8/10/10, Job Vranish <i>&lt;job.vranish@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: Job Vranish &lt;job.vranish@gmail.com&gt;<br>Subject: Re: [Haskell-cafe] Couple of questions about *let* within *do*<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc:
 haskell-cafe@haskell.org<br>Date: Tuesday, August 10, 2010, 12:52 PM<br><br><div id="yiv584871186">Yes, and yes :)<br><br>For example:<br><br>import Data.Char&nbsp; <br><br>main = do<br>&nbsp; let prompt s = do<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn s<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getLine<br>&nbsp; firstName &lt;- prompt "What's your first name?"<br>&nbsp; lastName &lt;- prompt "What's your last name?"<br>
&nbsp; let bigFirstName = map toUpper firstName&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bigLastName = map toUpper lastName&nbsp; <br>&nbsp; putStrLn $ "hey " ++ bigFirstName ++ " " ++ bigLastName ++ ", how are you?"<br><br>- Job<br><br>
<div class="yiv584871186gmail_quote">On Tue, Aug 10, 2010 at 12:40 PM, 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><blockquote class="yiv584871186gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top">
<br>From: Learn You a Haskell<br><br>===================<br><br>Remember let bindings? If you don't, refresh your memory on them by reading this section. They have to be in the form of let bindings in expression, where bindings are names to be given to expressions and expression is the expression that is to be evaluated that sees them. We also said that in list comprehensions, the in part isn't needed. Well, you can use them in do blocks pretty much like you use them in list comprehensions. Check this out:<br>
<br><br>&nbsp; import Data.Char &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; main = do &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn "What's your first name?" &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; firstName &lt;- getLine &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn "What's your last name?" &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 lastName &lt;- getLine &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let bigFirstName = map toUpper firstName &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bigLastName = map toUpper lastName &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; putStrLn $ "hey " ++ bigFirstName ++ " " ++ bigLastName ++ ", how are you?"<br>
<br>===================<br><br>Questions:<br><br>1) Is there an implicit *in* before the last line above?<br><br>2) Within a do "in" the IO monad (or any other monad), can a *let* do something like this?<br><br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; let x = do &nbsp; -- in a different monad<br><br><br>Michael <br><br></td></tr></tbody></table><br>







      <br>_______________________________________________<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></td></tr></table><br>