[Haskell-cafe] non-total operator precedence order
(was:Fractional/negative fixity?)
Carl Witty
cwitty at newtonlabs.com
Thu Nov 9 17:26:44 EST 2006
On Thu, 2006-11-09 at 22:20 +0100, Benjamin Franksen wrote:
> Henning Thielemann wrote:
> > Maybe making fixity declarations like type class instance declarations is
> > good.
>
> I thought so too at first but, having thought about it for a while, I now
> see this will cause /major/ problems. The precedence relations as declared
> explicitly by the programmer must form a DAG, with the vertices being the
> operator classes with equal precedence. There are two ways you can break
> the DAG: by introducing a 'smaller' or 'larger' relation when another
> module has already declared them to have equal precedence (resp. the other
> way around); or by introducing a cycle. Both can be caused simply by
> importing yet another module. I think it would be unacceptable not to
> provide some way for the programmer to resolve such conflicts.
[ ... possibilities for resolving conflicts omitted ... ]
Another possibility is:
If you have operators op1 and op2, where the compiler sees conflicting
requirements for the precedence of op1 and op2, then they are treated as
non-associative relative to each other: the expression
a op1 b op2 c
is illegal, and the programmer must instead write
(a op1 b) op2 c
or
a op1 (b op2 c)
Carl Witty
More information about the Haskell-Cafe
mailing list