[Haskell-cafe] Thoughts about redesigning "Num" type class

Jerzy Karczmarczuk jerzy.karczmarczuk at unicaen.fr
Mon Sep 14 18:17:08 UTC 2015

The NeverEnding story never ends. Good!

Le 14/09/2015 04:17, Richard A. O'Keefe a écrit :
> Without taking a stand, I note that Clean has one class
> per "arithmetic" function.
This should not be understood too rigidly, we can combine various 
sectors under one name, e.g.,

class Determinant a | *, -, fromInt a

-- as exemplified in the Clean book on FP, page 85. This is a shortcut, 
but replaces Haskell classes with many members.

> I also note that Money / Money -> Number (not Money)
> and if Money * Money -> something, it certainly isn't Money.
> Similarly, DateAndTime ± Duration -> DateAndTime,
> and DateAndTime - DateAndTime -> Duration, but
> DateAndTime + DateAndTime does not make sense.
> (DateAndTime and Duration come from Smalltalk.)
> I've chosen these examples because they are not "metaphorical"
> overloadings of the operators.  They do obey natural axioms.
> E.g., now + (now - now) = now, now + (dur*2) = (now+dur)+dur.
> (Assuming exact numbers underneath.)
> Sounds like multi-parameter typeclasses are going to be vital
> for a restructuring of the numeric classes.

I am afraid that multi-parameter classes will not "save" anything 
without some precision concerning types themselves. As I say from time 
to time, physicists live with similar questions for centuries, in the 
context of physical units.

Money*Money is strange. But what about  time*time? mass*mass? The 
gravitational constant G has the dimension m^3 kg^(-1) s^(-2). But only 
in SI, and related system.

You find all possible powers, of dimensional quantities, depending on 
your choice of *fundamental* unities. I learnt in school the 
MKS/electrostat system, where an electric charge had the dimension of 
the square root of force, m^(3/2) kg^(1/2) s^(-1). Later, studying 
quantum electrodynamics, I assimilated the "truth", that electric charge 
is just a number, dimensionless. Why?

Because physicists have no reluctance to use UNIVERSAL constants as pure 
numbers, which redefines meters, seconds, etc. : the speed of light is 
1. The Planck constant is 1 as well. And the electric charge becomes 

Cosmologists add G=1, and all dynamical quantities become dimensionless, 
no more meters, seconds, kilograms. Just numbers. They write formulae, 
where some quantity is proportional to the logarithm of time. This may 
disturb even those who accept non-integral powers of length. Is it 
"cheating", implying log(t/t_0), where the denominator reduces the time 

What about fractal objects with abominable dimensions, say 
m^(1.2654132089) ?
And such things exist in physics, they are called, for example, 
anomalous dimensions, measurable.

If we decide that there exists universally One Currency to Rule Them 
All, say, Renminbi,  then
money + money*money + 1/money + exp(-money) becomes computable.

Of course, you will not measure your waist in Planck length units 
(although for myself, year after year, it becomes less crazy), but all 
this is not a trivial issue.


This is another reason (the first was torsors) why I don't believe in 
too simplistic playing with straitjackets, forbidding some operations in 
the name of "coherence".  DateTime vs Duration is another version of the 
point/vector discussion, or vector vs. affine spaces. Thousands of texts 
covered all that...

Jerzy Karczmarczuk

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20150914/a4d9987f/attachment.html>

More information about the Haskell-Cafe mailing list