3. A precedence table says that case (rightwards) has higher precedence than operators and right associativity. If it's meaningful to talk about precedence of such syntactic constructs as case at all, it should probably be told to have a lower precedence, so "case x+1 of ..." is valid as "case (x+1) of ...". At least I don't see a difference between "case" (rightwards) and "if" (rightwards). I'm not sure if it makes sense to explain parsing of "case" in terms of precedence.
Interesting. The table seems to say that case(rightwards) has a higher precedence than infix operators, so that eg. case x of p -> x + y would parse as (case x of p -> x) + y which is in conflict with the longest parse rule. I have no idea why case(rightwards) is given a different precedence, and the inclusion of 'case alternative' in the list is confusing.
4.3.1. "A class declaration with no where part [...] The instance declaration must be given explicitly with no where part." Actually the where part may be present but empty, with the same meaning as no where part.
Generally I'm not sure that having a layout rule which says that {} is inserted when the next indentation level is about to start and the new indent is smaller than the outer one is necessary; in all useful cases the keyword which triggered the layout could be omitted, and writing let x = case x of foo -> ... should be either an error or it should be allowed to have the next indent smaller than the previous one - it's not useful to let it mean let {x = case x of {}} foo -> ... and in case one really wants to have empty alts in case, he can write {} explicitly.
I agree, but this isn't really a bug so there's no need to change the report. Besides, GHC is the only compiler which actually implements the layout rule as specified :-) Cheers, Simon