
[Attempting to resend]
Hi - I think your logic is:
I can define these two:
fFrac :: Fractional a => a -> a
fFrac n = n * (n+1) / 2
fInt :: Integral a => a -> a
fInt n = n * (n+1) `div` 2
so that, e.g.
fFrac (5.0 :: Float) == 15.0 :: Float
fInt (5 :: Integer) == 15 :: Integer
And all number types are either Integral or Fractional, so surely I should be able to define a single function of type:
f :: Num a => a -> a
This would seem reasonable, but I think there’s a problem with the last assumption. It is indeed possible for other types to be instances of Num, but not of Integral or Fractional.
For example, I could define:
instance Num Bool where
fromInteger 0 = False
fromInteger _ = True
(+) = (&&)
(*) = (||)
abs = id
signum _ = True
negate = not
Now this would probably be pretty dumb (and probably doesn’t comply with expectationshttps://hackage.haskell.org/package/base-4.14.0.0/docs/Prelude.html#t:Num), but is possible. (And also pretty dumb to define it without also define an instance Integral Bool where ..., but still possible).
So I don’t think
f :: Num a => a -> a
could be possible, since Num by itself (& the dumb Bool instance) has no way to do the division. (At least that I can think of, but would be very interested to hear if there is).
Regards, David.
From: Beginners