Good point, that would allow the original, desired function to be written 'f :: Num a => a -> a; f n = abs (n * (n + 1))'. However, that doesn't do the right thing when 'a' is Int or Float.<div><br /></div><div><br /></div>Any candidate 'f' would need to be written, all auxiliary functions inlined, in terms of the operations of Num. Since there is no way to do that when a ~ Int (since the Num Int instance doesn't have backdoors like this), it won't work. My polynomial example really only gives a conceptual idea why it _shouldn't_ work.<div><br /></div><div><br /></div>Assuming I'm not missing something; it's late here.<div><br /></div><div><br /></div>- Tom<div><br /></div><div><br /></div>-------- Original Message --------<div><br /></div>On 17 Dec 2020, 00:13, Henning Thielemann < lemming@henning-thielemann.de> wrote:<div><br /></div><div><br /></div>On Wed, 16 Dec 2020, Tom Smeding wrote:<div><br /></div>> You say 'abs x = x/2', but what's that (/)? For example, what is 'abs'<div><br /></div>> supposed to give when called on (the representation of) the polynomial<div><br /></div>> X^2 + 3X + 2?<div><br /></div>I meant it this way:<div><br /></div>instance (Fractional a) => Num (Polynomial a) where<div><br /></div>abs = fmap (/2)<div><br /></div>