
On 2006-09-11, Henning Thielemann
On Sun, 10 Sep 2006, Aaron Denney wrote:
Of course, there's always a typeclass, where we could add all sorts of other encodings of the Peano axioms, such as binary trees,, but I don't see that that buys us much if we don't also get access to operations beyond them, such as (an _efficient_) `div` for fastexp.
I don't see why Natural can't have an instance of whatever class ends up owning "div". It's perfectly well behaved on Naturals.
True. It seems odd to have a multiplicative (pseudo) inverse, but not an additive, though. Breaking up the numeric hierarchy too finely seems like it would be a pain -- take it to the limit of a separate class per function. What else would you drag in with "div"? "mod", (*), ...?
from http://darcs.haskell.org/numericprelude/src/Algebra/Core.lhs :
class (Num a) => Integral a where div, mod :: a -> a -> a divMod :: a -> a -> (a,a)
-- Minimal definition: divMod or (div and mod) div a b = fst (divMod a b) mod a b = snd (divMod a b) divMod a b = (div a b, mod a b)
That particular division means that Naturals can't support div because they're not a ring, which the (Num a) in that snippet above means for this numeric hierarcy, right? So this does drag in div, mod and (*), which all seem mostly reasonable, but it also drags in (-) and "negate", which you don't want for Naturals. -- Aaron Denney -><-