[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-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 <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
http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners
-------------- 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