[Haskell-cafe] Thoughts about redesigning "Num" type class
jerzy.karczmarczuk at unicaen.fr
Sat Sep 12 09:12:27 UTC 2015
Le 12/09/2015 10:15, Alexey Muranov a écrit :
> the difference of two points in an affine space is a vector, the sum
> of a point of an affine space and a vector is another point.
We can give several similar examples, but it might not be so useful for
the implementation of whatever. In the affine space we can interpolate
between points: p0 + 1/2*(p1-p0) is the middle point. Writing it just as
1/2*(p0+p1) might be considered as an abomination, since you should not
add points... Who should allow the first and forbid the second?
Programming languages is not mathematics. Types are not mathematical
domains. Classes are not categories... Whatever we/you propose, there
will be many unhappy people around. Math is full of subsumptions, whose
automatic implementation might be difficult, inefficient or ambiguous.
If you have an additive group, you have automatically a module over
integers. Sorry, *positive* integers. So, we might second David Thomas,
we should have Rigs (semi-rings). But why a *class*?? And, if you define
such object by hand, you may be accused of introducing redundancies,
that it should be inferred...
And whatever people say, e.g., Wren Romano:
> There are far more objects which have
> addition/multiplication without subtraction than there are objects
> with addition/subtraction without multiplication.
... several simple-minded people (myself included) will find not so
useful and/or clumsy the introduction of specific structures just to
forbid the subtraction. Nobody will fight against these purists, it is
simply a difficult issue.
All this is a can of worms, and physicists live with it already for
[Time : add please today to yesterday... Subtract works. They were
happy, because there were no computer formalisators around, who could
Please read the *easy* article of John Baez (2009) :
And then look upon torsors in general, and recognize that is is simply
All the best.
More information about the Haskell-Cafe