Show, Eq not necessary for Num [Was: Revamping the numeric classes]
Ketil Malde
ketil@ii.uib.no
09 Feb 2001 09:14:53 +0100
Brian Boutel <brian@boutel.co.nz> writes:
>> The fact that equality can be trivially defined as bottom does not imply
>> that it should be a superclass of Num, it only explains that there is an
>> ugly way of working around the problem.
> There is nothing trivial or ugly about a definition that reflects
> reality and bottoms only where equality is undefined.
I think there is. If I design a class and derive it from Num with
(==) is bottom, I am allowed to apply to it functions requiring a Num
argument, but I have no guarantee it will work.
The implementor of that function can change its internals (to use
(==)), and suddenly my previously working program is non-terminating.
If I defined (==) to give a run time error, it'd be a bit better, but
I'd much prefer the compiler to tell me about this in advance.
> Of course, if you do not need to apply equality to your "numeric" type
> then having to define it is a waste of time, but consider this:
It's not about "needing to apply", but about finding a reasonable
definition.
> - Having a class hierarchy at all (or making any design decision)
> implies compromise.
I think the argument is that we should move Eq and Show *out* of the
Num hierarchy. Less hierarchy - less compromise.
> - The current hierarchy (and its predecessors) represent a reasonable
> compromise that meets most needs.
Obviously a lot of people seem to think we could find compromises that
are more reasonable.
> - Users have a choice: either work within the class hierarchy and
> accept the pain of having to define things you don't need in order
> to get the things that come for free,
Isn't it a good idea to reduce the amount of pain?
> or omit the instance declarations and work outside the hierarchy. In
> that case you will not be able to use the overloaded operator
> symbols of the class, but that is just a matter of concrete syntax,
> and ultimately unimportant.
I don't think syntax is unimportant.
-kzm
--
If I haven't seen further, it is by standing in the footprints of giants