[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