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.
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to