# In hoc signo vinces (Was: Revamping the numeric classes)

**Dylan Thurston
**
dpt@math.harvard.edu

*Fri, 9 Feb 2001 16:49:09 -0500*

On Fri, Feb 09, 2001 at 12:55:12PM -0800, William Lee Irwin III wrote:
>* class (Eq a, Show a) => Num a where
*>* (+), (-), (*) :: a -> a -> a
*>* negate :: a -> a
*>* abs, signum :: a -> a
*>* fromInteger :: Integer -> a
*>* fromInt :: Int -> a -- partain: Glasgow extension
*>*
*>* ... So we have two totally inappropriate operations (fromInteger and
*>* fromInt), ...
*
I beg to differ on this point. One could provide a default
implementation for fromInt(eger) as follows, assuming a 'zero' and
'one', which do obviously fit (they are the additive and
multiplicative units):
fromInteger n | n < 0 = negate (fromInteger (-n))
fromInteger n = foldl (+) zero (repeat n one)
(Of course, one could use the algorithm in integer exponentiation to
make this efficient.)
Best,
Dylan Thurston