<div class="gmail_quote">2009/1/6 Wang, Chunye (NSN - CN/Beijing) <span dir="ltr">&lt;<a href="mailto:chunye.wang@nsn.com">chunye.wang@nsn.com</a>&gt;<span class="Apple-style-span" style="font-family: 宋体; "></span></span></div>
<div class="gmail_quote"><span dir="ltr"><span class="Apple-style-span" style="font-family: 宋体; ">Dear 
haskeller,</span></span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div>
<div><span><font face="宋体" size="2"></font></span>&nbsp;</div>
<div><span>&nbsp;&nbsp;&nbsp; <font face="宋体" size="2">Can 
I destructive rebind a local variable like this</font></span></div>
<div><span><font face="宋体" size="2"></font></span>&nbsp;</div>
<div><span><font face="宋体" size="2">import 
System.Directory<br>test filename = do <br>&nbsp; is_dir &lt;- 
doesDirectoryExist filename<br>&nbsp; let filename = if not is_dir then filename 
else filename</font></span></div></div></blockquote><div><br></div><div>Nope. &nbsp;The &quot;filename&quot; on the right side of the = is the same as the &quot;filename&quot; on the left, so you&#39;re making an infinite loop, the same way:</div>
<div><br></div><div>&nbsp;&nbsp; let x = x in x&nbsp;</div><div><br></div><div>is an infinite loop. &nbsp;However you can make a new name as you are trying, you just can&#39;t reference the old one. &nbsp;e.g.:</div><div><br></div><div>&nbsp;&nbsp; let filename = 42</div>
<div><br></div><div>Here would be just fine.</div><div><br></div><div>However, for cases like this, it is useful that single quote is a valid identifier, so you can say:</div><div><br></div><div>&nbsp;&nbsp;let filename&#39; = if not is_dir then filename else filename</div>
<div><br></div><div>(read &quot;filename prime&quot;)</div><div><br></div><div>Luke</div></div>