[Haskell-cafe] Layout section of Haskell 2010 Language Report -- Notes 1&2

Seth Lastname i_don.t_check_this at yahoo.com
Mon Apr 1 02:21:26 CEST 2013



I'm sure I'm missing something, but I'm having difficulty parsing or reconciling Note 1 and Note 2 of Section 10.3 ("Layout") of the Haskell 2010 Language Report.

http://www.haskell.org/onlinereport/haskell2010/haskellch10.html#x17-17800010.3


Can somebody point me in the right direction?

To be clear, I'm not concerned with GHC behavior or best programming practices here, only with the specification of the language given in the Report.

Note 1 says, "A nested context must be further indented than the enclosing context ('n' > 'm'). If not, 'L' fails, and the compiler should indicate a layout error."

Note 2 says, "If the first token after a 'where' (say) is not indented more than the enclosing layout context, then the block must be empty, so empty braces are inserted."

It seems that, in Note 2, the "first token" necessarily refers to a lexeme other than '{' (else it would not make sense), in which case a '{n}' token will have been inserted after 'where' (in the example given in the note), yielding a nested context which is "not indented more than the enclosing layout context", and thus failing the test in the first sentence of Note 1.
So, in the places where Note 2 would apply, it seems Note 1 would yield a "layout error".

For example, in the following code (replace '.' with space),

f x = let
......g y = 2 * y

..........where
..g x

it seems that Note 1 would "layout error", yet this seems precisely the case addressed by Note 2 wherein "{}" would be inserted after the 'where' yielding syntactically correct (albeit strange) code.

Any insight would be appreciated.

Thanks,
Seth
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130331/f7b15b84/attachment.htm>


More information about the Haskell-Cafe mailing list