John Meacham wrote:
On Fri, Apr 18, 2008 at 08:36:42AM +0100, Simon Peyton-Jones wrote:
Not allowing infix functions on the LHS would be a notable
simplification. Constructors in patterns should still be infix of
course: f (a :=: b) = ...
I don't know, I think this will confuse things, especially for newbies,
people tend to say things like:
a + b = foo
as "a plus b is foo", and so would probably naturally write it in infix
form, it would be a source of confusion if the compiler didn't accept
it.
I don't think saying ~ and ! are operators unless they
1. immediately followed by a '(', a letter, or an underscore
2. are preceded by whitespace or BOL
is that onerous.
I don't like the idea of solving this in the lexical syntax, e.g. by the
rules you gave above, it's just too ad-hoc. I think a better way to fix
it is just to disallow infix declarations of !, ~ (and @ ?). Currently
the grammar has:
funlhs -> var apat {apat}
| pati+1 varop(a,i) pati+1
| lpati varop(l,i) pati+1
| pati+1 varop(r,i) rpati
| ( funlhs ) apat {apat}
so we can use a restricted variant of varop that doesn't include !, ~ or
@ (well, varop doesn't currently include ~ or @, but I assume we want it
to - it would be similar to the way "hiding" is handled now).
Incedentally I think we should use a different operator for array
indexing, because ! is almost universally used to mean "strict" now: in
bang patterns, strict datatype fields, and $!. See
http://hackage.haskell.org/trac/haskell-prime/wiki/ArrayIndexing
Cheers,
Simon
_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime