[Haskell-cafe] Layout rule (was Re: PrefixMap: code reviewrequest)
Brian Hulley
brianh at metamilk.com
Fri Mar 3 13:21:16 EST 2006
Brian Hulley wrote:
> Brian Hulley wrote:
> One other thing I've been wanting to ask (not to change! :-)) for a
> while is: how is the following acceptable according to the rules in
> the Haskell98 report where "where" is one of the lexemes, which when
> followed by a line more indented than the line the
> layout-starting-lexeme is on, should start an implicit block:
>
> module M where
> data T = ..... -- not indented!
>
> According to my understanding of the layout algorithm, the above code
> would have to be written:
>
> module M where
> data T = ....
>
> Can anyone shed some light on what the formal rule is that allows the
> first (and very useful) way of laying out code to be ok?
The solution (as someone pointed out to me in an email) is that the layout
block only *finishes* when the current indentation is *less* than the
indentation of the lines in the layout block (rather than *starting* only
when the current indentation is *more* than the indentation of the line
containing the "where" etc).
However I think there is an error in the description of this in section 2.7
of the Haskell98 report, which states:
"If the indentation of the non-brace lexeme immediately following a where,
let, do or of is less than or equal to the current indentation level, then
instead of starting a layout, an empty list "{}" is inserted, and layout
processing occurs for the current level ..."
I dispute the "or equal" in the above statement, since it seems to be
clearly in contradiction to what is actually being done.
Regards, Brian.
More information about the Haskell-Cafe
mailing list