<html>
  <head>
    <meta content="text/html; charset=ISO-8859-1"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">On 08-08-12 17:27, Ertugrul S&ouml;ylemez
      wrote:<br>
    </div>
    <blockquote
      cite="mid:20120808172756.0119fe08@tritium.streitmacht.eu"
      type="cite">
      <pre wrap="">Vo Minh Thu <a class="moz-txt-link-rfc2396E" href="mailto:noteed@gmail.com">&lt;noteed@gmail.com&gt;</a> wrote:

</pre>
      <blockquote type="cite">
        <pre wrap="">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
</pre>
      </blockquote>
      <pre wrap="">
Martijn has actually covered this question:

</pre>
      <blockquote type="cite">
        <blockquote type="cite">
          <pre wrap="">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 &lt;-
bindings, and also makes it less of a hassle to move stuff around.
</pre>
        </blockquote>
      </blockquote>
    </blockquote>
    <br>
    To make it more clear, this is the transformation I propose:<br>
    <br>
    <font face="Courier New, Courier, monospace">do ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- not a
      let-less binding<br>
      &nbsp;&nbsp; x1 = exp1&nbsp; -- \<br>
      &nbsp;&nbsp; ..&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --&nbsp; only let-less bindings&nbsp;&nbsp; <br>
      &nbsp;&nbsp; xn = expn&nbsp; -- /<br>
      &nbsp;&nbsp; ...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -- not a let-less binding<br>
    </font>&nbsp;&nbsp; <br>
    becomes<br>
    <br>
    <font face="Courier New, Courier, monospace">do ...<br>
      &nbsp;&nbsp; let x1 = exp1<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ..<br>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; xn = expn<br>
      &nbsp;&nbsp; ...<br>
    </font>&nbsp;&nbsp; <br>
    So<br>
    <br>
    <font face="Courier New, Courier, monospace">main = do<br>
      &nbsp; x = y<br>
      &nbsp; y = 5<br>
      &nbsp; a = b<br>
      &nbsp; b = 6<br>
      &nbsp; print (x, y, a, b)</font><br>
    <br>
    would put everything in the same binding group and compile
    successfully. To get Thu's example, you would write<br>
    <br>
    <font face="Courier New, Courier, monospace">main = do<br>
      &nbsp; x = y<br>
      &nbsp; y = 5<br>
      &nbsp; let a = b<br>
      &nbsp; let b = 6<br>
      &nbsp; print (x, y, a, b)<br>
    </font><br>
    The last let could even be left out.<br>
    <br>
    Cheers, Martijn<br>
    <br>
    <blockquote
      cite="mid:20120808172756.0119fe08@tritium.streitmacht.eu"
      type="cite">
      <pre wrap="">
The suggestion seems sound to me, and the additional 'let' can really be
annoying in cases where you have a lot of 'let' bindings among very few
monadic actions.  My current way to deal with this is to move the stuff
to separate computations, but it's certainly not a nice solution:

    myComp = c &gt;&gt;= f
        where
        f x = ...
            where
            a = ...
            b = ...


Greets
Ertugrul

</pre>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Haskell-Cafe mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a>
<a class="moz-txt-link-freetext" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>