[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
  a op1 (b op2 c)

Carl Witty

More information about the Haskell-Cafe mailing list