
Am Freitag, 17. Oktober 2008 17:56 schrieb Larry Evans:
On 10/17/08 08:12, Daniel Fischer wrote:
At first, the |let v = e| combination looked best (less typing). However, my actual e0 was more complicated:
array_complete [ Expr <== Op0 GramOne , Term <== Op0 GramOne , Factor <== Op0 GramOne ]
where <== was a binary operator which just produced a tuple pair. I wanted to keep the expression on multiple lines because it's easier to read. The <== was defined to make the expression look more like grammar productions (the Op0 GramOne is not the final rhs. That's only for testing purposes.).
Unfortunately, using let with the multiline rhs failed to compile (due, I guess, to some layout rules, which I find difficult to fathom).
It would be no problem if you used only layout. The problem is that you used braces and semicolons for the do-block, but not for the let. You would have to write it like do { let { v0 = e0 } ; print v0 } , i.e. also use braces for the let block. If you write do { let v0 = e0 ; print v0 } it would be parsed as do { let { v0 = e0 ; print v0 } } Either braces and semicolons everywhere or all layout, anything else invites misparsings. HTH, Daniel