
On Sun, 2011-11-06 at 15:52 -0500, Edward Kmett wrote:
Whichever way you go on this someone might get (slightly) annoyed, since:
Text.PrettyPrint.Leijen infixr 6 <>,<+>
That turns out to be ok because in that module the property is: empty <+> text "foo" = text " foo" whereas for Text.PrettyPrint.HughesPJ, empty is a unit of <+>.
Text.PrettyPrint.HughesPJ infixl 6 <>,<+>
Actually currently all the fixity declarations have been removed, but yes that's what they were in previous released versions. David: presumably this is a mistake? You didn't really mean to remove: infixl 6 <> infixl 6 <+> infixl 5 $$, $+$ when merging with ghc's variant of the pretty print module.
Ultimately no code breaks, after all it is changing the associativity of an operator that is by definition *associative*. ;)
That's what I thought too, but I already gave an example: a <> empty <+> b This means different things depending on whether we use infixl or infixr. And as I noted, this doesn't bite Text.PrettyPrint.Leijen because it lacks the <+> unit law. So my tentative suggestion is: infixr 6 <> infixr 5 <+> infixr 4 $$, $+$ So <> binds tighter than <+> and $$ and $+$ are still lower precedence than <> and <+>, but switched round to being right associative. Duncan