[Haskell-cafe] referential transparency? (for fixity of local operators)

wren ng thornton wren at freegeek.org
Fri Oct 5 15:36:24 CEST 2012


On 10/5/12 7:11 AM, Johannes Waldmann wrote:
> I was really surprised at the following:
>
> *Main> 1 + 2 * 3
> 7
>
> *Main> ( \ (+) (*) -> 1 + 2 * 3 ) (+) (*)
> 9
>
> because I was somehow assuming that either
>
> a) the Prelude fixities of the operators are kept

After dealing with how Coq handles infix operators, I'm profoundly glad 
that Haskell doesn't do this. The fixity of an operator is a property of 
the operator itself, not of the notation used to display the operator. 
There's no reason for my (+) operator to have the same fixity as your 
(+) operator, regardless of whether we happen to use the same notation 
or not.

> b) or they are undefined, so the parser rejects.
>
> but the Haskell standard says "Any operator lacking a fixity declaration
> is assumed to be infixl 9". This really should be "infix 9"?

Yep, default fixity. As Roman Cheplyaka mentioned, this is especially 
helpful for ad hoc uses of backticks. (For non-adhoc uses, it's best to 
give an explicit fixity just like for other infix operators.)

As for whether the default should be "infix 9" instead of "infixl 9", I 
dunno...

-- 
Live well,
~wren



More information about the Haskell-Cafe mailing list