<div dir="ltr">Hello!<div><br></div><div>A small proposition for the next standard.</div><div>1) It is to lower verbosity with omitting 'let' keyword in do-notation and use only (=) for describing let/pure blocks.</div><div>Example:</div><div><br></div><div>currently:</div><div><br></div><div><font face="monospace, monospace">main = do </font></div><div><font face="monospace, monospace">     let x = expression1...</font></div><div><font face="monospace, monospace">     let y = expression2...</font></div><div><font face="monospace, monospace">     z <- action1</font></div><div><font face="monospace, monospace">     putStrLn (x ++ y ++ z)</font></div><div><br></div><div>It could be made less verbose currently with putting x and y in the same 'let' block:</div><div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">main = do </font></div><div><font face="monospace, monospace">     let x = expression1...</font></div><div><font face="monospace, monospace">         y = expression2...</font></div><div><font face="monospace, monospace">     z <- action1</font></div><div><font face="monospace, monospace">     putStrLn (x ++ y ++ z)</font></div></div><div><br></div><div>But what if we use (=) for describing different expressions in do-block.</div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">main = do</font></div><div><font face="monospace, monospace">     x = expression1...</font></div><div><font face="monospace, monospace">     y = expression2...</font></div><div><font face="monospace, monospace">     z <- action1</font></div><div><font face="monospace, monospace">     putStrLn (x ++ y ++ z)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">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.</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="arial, helvetica, sans-serif">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.</font></div><div><font face="arial, helvetica, sans-serif">Example:</font></div><div><font face="arial, helvetica, sans-serif"><br></font></div><div><font face="monospace, monospace">main = do</font></div><div><font face="monospace, monospace">     z <- action x</font></div><div><font face="monospace, monospace">     x = expression1 y</font></div><div><font face="monospace, monospace">     y = expression2</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">     putStrLn (x ++ y ++ z)</font></div><div><font face="monospace, monospace"><br></font></div><div><font face="arial, helvetica, sans-serif">Best regards,</font></div><div><font face="arial, helvetica, sans-serif">Vassil Keremidchiev</font></div><div><font face="monospace, monospace"><br></font></div></div>