Negation

Lennart Augustsson lennart at augustsson.net
Mon Feb 8 13:30:07 EST 2010


Of course unary minus should bind tighter than any infix operator.
I remember suggesting this when the language was designed, but the
Haskell committee was very set against it (mostly Joe Fasel I think).

I think it's too late to change that now, it could really introduce
some subtle bugs with no parse or type errors.

On Mon, Feb 8, 2010 at 5:59 PM, Ross Paterson <ross at soi.city.ac.uk> wrote:
> On Mon, Feb 08, 2010 at 04:18:07PM +0000, Simon Peyton-Jones wrote:
>> Which of these definitions are correct Haskell?
>>
>>   x1 = 4 + -5
>>   x2 = -4 + 5
>>   x3 = 4 - -5
>>   x4 = -4 - 5
>>   x5 = 4 * -5
>>   x6 = -4 * 5
>>
>> Ghc accepts x2, x4, x6 and rejects the others with a message like
>> Foo.hs:4:7:
>>     Precedence parsing error
>>         cannot mix `+' [infixl 6] and prefix `-' [infixl 6] in the same infix expression
>>
>> Hugs accepts them all.
>>
>> I believe that the language specifies that all should be rejected.  http://haskell.org/onlinereport/syntax-iso.html
>
> I think GHC conforms to the Report; here is the relevant part of the grammar:
>
> exp6    ->      exp7
>        |       lexp6
> lexp6   ->      (lexp6 | exp7) + exp7
>        |       (lexp6 | exp7) - exp7
>        |       - exp7
>
> exp7    ->      exp8
>        |       lexp7
> lexp7   ->      (lexp7 | exp8) * exp8
>
> But I agree they should all be legal, i.e. that unary minus should bind
> more tightly than any infix operator (as in C).  Note that Hugs does
> not do that:
>
> Hugs> -5 `mod` 2
> -1
> Hugs> (-5) `mod` 2
> 1
> Hugs> -(5 `mod` 2)
> -1
> _______________________________________________
> Haskell-prime mailing list
> Haskell-prime at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-prime
>


More information about the Haskell-prime mailing list