
G'day all.
Quoting Henning Thielemann
I assume that these function are for computations like subtract :: DegreeCentigrade -> Kelvin -> DegreeCentigrade diff :: DegreeCentigrade -> DegreeCentigrade -> Kelvin and the intentions are different enough to implement distinct functions. I assume that there will be an implementation for 'diff' whenever there is one for 'subtract' and vice versa, thus considering them as different instances of the same class does not seem to be a good design.
That's interesting, because I was thinking about homogeneous spaces: subtract :: Point -> Vector -> Point diff :: Point -> Point -> Vector Or: subtract :: Time -> Duration -> Time diff :: Time -> Time -> Duration Or more generally: class Group g where id :: g (+) :: g -> g -> g negate :: g -> g class (Group g) => LeftGroupAction g x where add :: g -> x -> x subtract :: x -> g -> x subtract x g = add g (negate x) class (LeftGroupAction g x) => RegularLeftGroupAction g x where diff :: x -> x -> g Cheers, Andrew Bromage