[Haskell-cafe] 'let' keyword optional in do notation?

Vo Minh Thu noteed at gmail.com
Wed Aug 8 17:17:49 CEST 2012


2012/8/8 Martijn Schrage <martijn at oblomov.com>:
> Hi cafe,
>
> For a while now, I've been wondering why the 'let' keyword in a do block
> isn't optional. So instead of
>
> do ...
>    let x = exp1
>        y = exp2
>    z <- exp3
>    ...
>
> you could simply write
>
> do ...
>    x = exp1
>    y = exp2
>    z <- exp3
>    ...
>
> Where each sequence of let-less bindings is put in a separate binding group.
> I'm no parsing wizard, but I couldn't come up with any situations in which
> this would cause ambiguity. To me, the let-less version is easier on the
> eyes, more consistent with <- bindings, and also makes it less of a hassle
> to move stuff around.
>
> The above probably also holds for list/monad comprehensions, but the
> explicit let has never really bothered me there.

Hi,

This is not a parsing problem, but a scoping one: try to run this program:

main = do
  let x = y
      y = 5
  let a = b
  let b = 6
  print (x, y, a, b)

Cheers,
Thu



More information about the Haskell-Cafe mailing list