import "Prelude" data E = E String instance Additive E where zero = E "0" E a + E b = E ("(" + a + "+" + b + ")") instance Ring E where one = E "1" neg (E a) = E ("(-" + a + ")") E a - E b = E ("(" + a + "-" + b + ")") E a * E b = E ("(" + a + "*" + b + ")") fromInteger x = E (show x) eToString (E a) = a a = E "a" b = E "b" c = E "c" d = E "d" main = eToString (-a + b + (-c*d)) -- (((-a)+b)+(-(c*d)))