On Mon, Sep 04, 2006 at 03:39:06PM +0100, Simon Peyton-Jones wrote:
| ------------------------------------------------ | data Equation = ... | instance Show Equation where ... | | instance Show [Equation] | where | showsPrec _ eqs = <certain program which prints a list of equation | in a `nicer' way than by the default list printing | > | ------------------------------------------------ | | This gives the user possibility to redefine a certain part of the | library instance. | Is not ghc-6.4.1 better at this point?
Perhaps. That's what I'd like feedback about.
Let me exlain a bit more the reason. show [1, 2, 3] = "[1,2,3]" -- all right, let it be. Now, for the list eqs :: [Equation], the GHC instance prints it, for example, as ------------------- [[21] n+0 = 0 (Parents [[1],[2]]),[22] n+(s n) = s (n+m) (Parents [[33], [44]]),[23] n*0 = 0 (Parents [[],[]])] ------------------- And I would like it to be at least -------------------- [[21] n+0 = 0 (Parents [[1],[2]]), [22] n+(s n) = s (n+m) (Parents [[33],[44]]), [23] n*0 = 0 (Parents [[],[]]) ], -------------------- which is easier to read. I decided that to overlap with the ghc instance is the simplest and best solution. I thank Ian Lynagh <igloo@earth.li> who suggests L> instance Show Equation where L> showsPrec _ eq = ... L> showList eqs = <certain program which ...> Indeed. I even wrote a showsList function, without knowing of the showsList class method! But as Ian writes, L> This doesn't address the general issue So far, I tried this overlap only for Show List and Show Pair, but probably, users and myself would like to partially redefine some other library instances. Simon Peyton-Jones writes
(Incidentally, 6.5 has been like this for about a year without complaints.
I am sorry for this, I am slower than GHC. I have been with 6.4.1 last 1-2 years, and ignored the further version matters. Finally, a week ago decided to look into what is coming with 6.6.
Also I made the change because people wanted to be able to *use* overlapping instances (defined in a library) without having to give the -fallow-overlapping-instances flag.)
The difference for me is to have a little bit less-or-more comfort. DoCon-2.09 has ported from 6.4.1 to 6.6-candidate only by removing the `data' name from `dependencies', and it looks like working all right. In Dumatel-1.06, it reports the error of this library overlap for `Show'. For exampl, I can define the showsList method, as Ian suggests. Generally, I suspect that ghc-6.4.1 is better at this point of library overlaps, but I am not sure. Anyway, the GHC developers have now more of feedback, they know better and can decide. Thanks, ----------------- Serge Mechveliani mechvel@botik.ru