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

Reply via email to