[Haskell-cafe] Re: Numeric type classes

ajb at spamcop.net ajb at spamcop.net
Tue Sep 12 20:59:30 EDT 2006


G'day all.

Quoting Henning Thielemann <lemming at henning-thielemann.de>:

> It seems we are at a point, where we have to define what is a 'number'.

For backwards compatibility, I'd say a Num is what it is at the
moment.

One of the proposals that comes up every so often is to allow the
declaration of a typeclass instance to automatically declare instances
for all superclasses.  So, for example:

    class (Functor m) => Monad m where
        fmap f m = m >>= return . f

    instance Monad Foo where
        return a = {- ... -}
        m >>= k = {- ... -}
        fail s = {- ... -}

This will automatically declare an instance of Functor Foo.

Similarly, a finer-grained collection of numeric typeclasses could
simply make Num a synonym for (Show a, Ord a, Ring a, Signum a).
Declaring an instance for (Num Bar) declares all of the other
instances that don't yet have a declaration.

> More precisely: Can you tell me the difference between numbers and "more
> complex mathematical objects"?

Yes.  A Num is anything which supports the common mathematically-
significant operations which are supported by the basic built-in machine
types such as Int and Double.  It need not _be_ a built-in machine type,
but it must support those operations.

(Yes, some architectures support vector operations.  This doesn't count
as "basic".  No, some architectures don't support Double or Word64
natively.  I don't care.)

Cheers,
Andrew Bromage


More information about the Haskell-Cafe mailing list