
2012/8/8 Martijn Schrage
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