Hello!
A small proposition for the next standard.
1) It is to lower verbosity with omitting 'let' keyword in do-notation and use only (=) for describing let/pure blocks.
Example:
currently:
main = do
let x = expression1...
let y = expression2...
z <- action1
putStrLn (x ++ y ++ z)
It could be made less verbose currently with putting x and y in the same 'let' block:
main = do
let x = expression1...
y = expression2...
z <- action1
putStrLn (x ++ y ++ z)
But what if we use (=) for describing different expressions in do-block.
main = do
x = expression1...
y = expression2...
z <- action1
putStrLn (x ++ y ++ z)
So pure 'let' expressions to use (=) for assignment and monadic actions use (<-) for execution/chaining. If 'let' is optional - this proposition will be backward compatible.
2) Second proposition is every pure expression ('let') in do-block to have visibility in whole block, just like top-level function is visible in whole module. Currently there is difference in visibility depending on that if a function is in do-block or is outside it.
Example:
main = do
z <- action x
x = expression1 y
y = expression2
putStrLn (x ++ y ++ z)
Best regards,
Vassil Keremidchiev