2009/1/6 Wang, Chunye (NSN - CN/Beijing) <chunye.w...@nsn.com>
Dear haskeller,
>
>
>     Can I destructive rebind a local variable like this
>
> import System.Directory
> test filename = do
>   is_dir <- doesDirectoryExist filename
>   let filename = if not is_dir then filename else filename
>

Nope.  The "filename" on the right side of the = is the same as the
"filename" on the left, so you're making an infinite loop, the same way:

   let x = x in x

is an infinite loop.  However you can make a new name as you are trying, you
just can't reference the old one.  e.g.:

   let filename = 42

Here would be just fine.

However, for cases like this, it is useful that single quote is a valid
identifier, so you can say:

  let filename' = if not is_dir then filename else filename

(read "filename prime")

Luke
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to