On 08/01/06, Bruno Oliveira <bruno.oliveira@comlab.ox.ac.uk> wrote:
On 08 Jan 2006 16:37:47 +0100, Peter Simons wrote:
Bruno Oliveira writes:
class Foo o where (:+) :: o -> o -> o
The Haskell report specifies in section "2.4 Identifiers and Operators":
An operator symbol starting with a colon is a constructor.
Think of ':' as a character that is interpreted as "uppercase"; you can't use it to start a function or variable name.
Then this declaration should be rejected as invalid, right?
That's why I think this is a parsing bug...
Cheers,
Bruno
Hmm... yeah, it does seem like a parsing bug. The relevant rules from the report are: ---- topdecl -> ... | class [scontext =>] tycls tyvar [where cdecls] ... cdecls -> { cdecl1 ; ... ; cdecln } (n>=0) cdecl -> gendecl | ... gendecl -> vars :: [context =>] type (type signature) | ... vars -> var1 , ..., varn (n>=1) var -> varid | ( varsym ) varsym -> ( symbol {symbol | :})<reservedop | dashes> ---- So it should not be permitting a type declaration for something starting with a colon, since symbol does not match colon.