[Haskell-beginners] unwanted Fractional constraint

David James dj112358 at outlook.com
Fri Dec 11 16:38:46 UTC 2020

[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 expectations<https://hackage.haskell.org/package/base->), 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 <beginners-bounces at haskell.org> on behalf of M Douglas McIlroy <m.douglas.mcilroy at dartmouth.edu>
Sent: Friday, December 11, 2020 1:03:03 PM
To: beginners at haskell.org <beginners at haskell.org>
Subject: [Haskell-beginners] unwanted Fractional constraint

For rational functions that take on integer values at integer
arguments, for example n*(n+1)/2, is there a way to doctor the
corresponding Haskell definition

    f n = n*(n+1)/2

so that the type signature becomes

    f :: Num a => a -> a

rather than

    f :: Fractional a => a -> a

Doug McIlroy
Beginners mailing list
Beginners at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20201211/139c3d1a/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: F5B325D295EC4EFD853932C4105331AE.png
Type: image/png
Size: 144 bytes
Desc: F5B325D295EC4EFD853932C4105331AE.png
URL: <http://mail.haskell.org/pipermail/beginners/attachments/20201211/139c3d1a/attachment.png>

More information about the Beginners mailing list