On Wed, Jul 10, 2013 at 9:47 AM, <o...@okmij.org> wrote: > > Jon Fairbairn wrote: > > It just changes forgetting to use different variable names because of > > recursion (which is currently uniform throughout the language) to > > forgetting to use non recursive let instead of let. > > Let me bring to the record the message I just wrote on Haskell-cafe > > http://www.haskell.org/pipermail/haskell-cafe/2013-July/109116.html > > and repeat the example: > > In OCaml, I can (and often do) write > > let (x,s) = foo 1 [] in > let (y,s) = bar x s in > let (z,s) = baz x y s in ... > > In Haskell I'll have to uniquely number the s's: > > let (x,s1) = foo 1 [] in > let (y,s2) = bar x s1 in > let (z,s3) = baz x y s2 in ... > > and re-number them if I insert a new statement. > >
Usage of shadowing is generally bad practice. It is error-prone. Hides obnoxious bugs like file descriptors leaks. The correct way is to give different variables that appear in different contexts a different name, although this is arguably less convenient and more verbose.
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe