
On 6 November 2011 20:52, Edward Kmett
Ultimately no code breaks, after all it is changing the associativity of an operator that is by definition associative. ;)
Well, as Duncan pointed out, some code *does* break due to the interaction of <> and <+>. HughesPJ pretty has the rule: empty <+> d = d so (using current assocativity) (foo <> empty) <+> bar == foo <+> bar or (using new associativity): foo <> (empty <+> bar) == foo <> bar As Duncan mentioned, that problem occurs in GHC if you change its pretty printer to use right-assocative <>/<+>. I think that's a design problem, because the same unintuitive problem could happen with the current assocativity: foo <+> empty <> bar The better way to avoid this is to make sure <> binds more tightly than <+>, as proposed in another mail. / Thomas