haskell operator precedence

1997-03-18 Thread Fergus Henderson

Hi,

Is the following legal Haskell?

 infixr 0 `foo`
 infixr 0 `bar`
 
 x `foo` y = "foo(" ++ x ++ "," ++ y ++ ")"
 x `bar` y = "bar(" ++ x ++ "," ++ y ++ ")"
 dubious a b c = a `foo` b `bar` c

According to the grammar in the Haskell report, I don't think it is.
However, ghc-0.24 (ancient, I know) and Hugs 1.3 both accept it without
complaint.

-- 
Fergus Henderson [EMAIL PROTECTED]   |  "I have always known that the pursuit
WWW: http://www.cs.mu.oz.au/~fjh   |  of excellence is a lethal habit"
PGP: finger [EMAIL PROTECTED] | -- the last words of T. S. Garp.




Re: haskell operator precedence

1997-03-18 Thread Simon L Peyton Jones


| However, in return, perhaps somebody can supply me with parse trees for
| the following:
| 
| - - 1(accepted by nhc and hbc)
| (- 1 `n6` 1)   where infix  6 `n6`   (accepted by nhc, hbc, ghc)
| (- 1 `r6` 1)   where infixr 6 `r6`   (accepted by nhc, hbc, ghc)
| 
| As I read the grammar (for 1.3), all of these should be illegal.  In
| fact, the compilers don't even give consistent answers for the last
| example:  ghc and nhc treat it as (-(1 `r6` 1)) while hbc treats it
| as ((-1) `r6` 1).

Good point!  I've fixed this in GHC.  It might or might not make it into
2.02 which is in build-and-tar mode at the moment.

Simon