Haskell&#x27;s solution to this problem is also excellent and needs to be better known and copied into newer languages.  The language has curly braces around the bodies of &#x27;let&#x27;, &#x27;case&#x27;, &#x27;where&#x27;, and &#x27;do&#x27; constructs, and also the bodies of modules, and semicolons between the constituents of those constructs -- but when the compiler demands a &#x27;{&#x27; and doesn&#x27;t see one, it uses indentation to insert them in the obvious places.  If your indentation is incorrect, you&#x27;re likely to get an implicit &#x27;;&#x27; or &#x27;}&#x27; put in the wrong place, and you go fix it.<p>The scheme works so well that people will often go months into their Haskell education before they encounter code with explicit braces and semicolons.