
On Tue, Sep 05, 2006 at 12:50:39PM +0400, Serge D. Mechveliani wrote:
More about instance overlaps with the GHC library:
I need to print in a special way the data of [Equation], (Term, Term), [(Term, Term)], (Equation, Equation).
The first can be by defining showList in instance Show Equation. But Show has not a method of showPair. So, I need to write the function showsTermPair and to use it together with another home-made function showsListGeneric.
You seem to be using special instances to do two things: add spacing and remove extraneous parentheses. A neater way to do the latter would be to use the precedence parameter of showsPrec for Term to control whether the parentheses are added in the first place, e.g. (untested) showsPrec p t = (case t of VarT v -> shows v App f [] [] -> showString (name f) App f [] [r] -> showParen (p > app_prec) $ showString (name f) . showChar ' ' . showsPrec (app_prec+1) r ... where app_prec = 10