On 22-7-2013 17:09, i c wrote:
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.

Not if you use pattern guards:

{-# LANGUAGE PatternGuards #-}

        | ~(x,s) = foo 1 []
        , ~(y,s) = bar x s
        , ~(z,s) = baz x y s
        = ...

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


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

Reply via email to