
On Mon, Feb 12, 2001 at 07:24:31AM +0000, Marcin 'Qrczak' Kowalczyk wrote:
Sun, 11 Feb 2001 22:27:53 -0500, Dylan Thurston
pisze: Reading this, it occurred to me that you could explictly declare an instance of Powerful Integer Integer and have everything else work. No, because it overlaps with Powerful a Integer (the constraint on a doesn't matter for determining if it overlaps).
Point. Thanks. Slightly annoying.
Then the second argument of (^) is always arbitrary RealIntegral,
Nit: the second argument should be an Integer, not an arbitrary RealIntegral.
Of course not. (2 :: Integer) ^ (i :: Int) makes perfect sense.
But for arbitrary RealIntegrals it need not make sense. Please do not assume that toInteger :: RealIntegral a => a -> Integer toInteger n | n < 0 = toInteger negate n toInteger 0 = 0 toInteger n | n > 0 = 1 + toInteger (n-1) (or the more efficient version using 'even') terminates (in principle) for all RealIntegrals, at least with the definition as it stands in my proposal. Possibly toInteger should be added; then (^) could have the type you suggest. For usability issues, I suppose it should. (E.g., users will want to use Int ^ Int.) OK, I'm convinced of the necessity of toInteger (or an equivalent). I'll fit it in. Best, Dylan Thurston