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

Malcolm Wallace malcolm.wallace at me.com
Tue Apr 2 11:43:06 CEST 2013


On 1 Apr 2013, at 01:21, Seth Lastname wrote:

> 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),

Correct.

> 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",

Yes, a "{n}" token has been inserted after the "where".
No, it does not yield an incorrectly nested context, because L is the function that decides whether to add to the context.

Looking only at the three equations for L that deal with the pseudo-token "{n}", including their side conditions, we see:

L ({n} : ts) (m : ms) = {  :  (L ts (n : m : ms)) if n > m (Note 1)
L ({n} : ts) []       = {  :  (L ts [n])          if n > 0 (Note 1)
L ({n} : ts) ms       = {  :  }  :  (L (< n >: ts) ms) (Note 2)

So, the third clause is triggered either when the nested-context stack (ms) is empty and n is zero or negative; or when the context stack is non-empty and n<m.  That is, we avoid creating a context stack that would be incorrect (according to Note 1).

Regards,
    Malcolm


More information about the Haskell-Cafe mailing list