I like this proposition. I am not sure how to argue in favour as the measure is almost purely adressing an issue of esthetics. But I do like it, and I also find the comparison between C and Pascal relevant. I guess a patch or pull request will be the best way to move forward and shake some relevant problems out of the woodwork. Be known as the guy who removed let, go for it.<br><br>:: Finn Espen Gundersen (fra mobil)<br><br>---- Sven Panne skrev ----<br><br><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2017-04-16 14:37 GMT+02:00 Vassil Ognyanov Keremidchiev <span dir="ltr"><<a href="mailto:varosi@gmail.com" target="_blank">varosi@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>A small proposition for the next standard.</div></div></blockquote><div><br></div><div>I think every proposal should clearly state the problem it is trying to solve first, because only after there's some agreement that it is actually a problem, further discussion is useful.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div>1) It is to lower verbosity with omitting 'let' keyword in do-notation and use only (=) for describing let/pure blocks. [...]</div></div></blockquote><div><br></div><div>As has been discussed quite a few times on this and other Haskell-related lists, "verbosity" is a very subjective measure, and the number of characters to type is one of the worst metrics for evaluating the usefulness of a feature.</div><div><br></div><div>In our example at hand, "let" is a very useful syntactic cue, and the visual difference between "x = foo" and "x <- foo" is a bit low IMHO. One can probably remove a lot of other syntactic stuff from Haskell and still keep it parsable by machines, but I think that's a non-goal. Remember that e.g. the entropy of English text is around 1 bit per character, but we don't speak binary, for a good reason. :-)<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><span style="font-family: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.</span></div></div></blockquote><div><br></div><div>I think the difference is there for a good reason: The desugaring rules are easy to comprehend. With your proposal things get complicated. Take e.g. a slightly modified version of your example (which can easily be complicated much more by alternating the different forms of bindings):</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><span style="font-family:monospace,monospace">main = do</span><br></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><span style="font-family:monospace,monospace"> </span><span style="font-family:monospace,monospace">z</span></div><div><font face="monospace, monospace"><br></font></div><div><font face="monospace, monospace">     putStrLn (x ++ y ++ z)</font></div></div></blockquote><div><br></div><div>What is the meaning of this? And what problem exactly is this part of the proposal trying to solve?</div></div></div></div>