| From | Sent On | Attachments |
|---|---|---|
| John Meacham | Oct 12, 2005 7:41 pm | |
| Philippa Cowderoy | Oct 12, 2005 7:55 pm | |
| John Meacham | Oct 12, 2005 8:16 pm | |
| Wolfgang Jeltsch | Oct 13, 2005 5:48 am | |
| John Meacham | Oct 13, 2005 6:03 am | |
| Malcolm Wallace | Oct 13, 2005 6:15 am | |
| Andres Loeh | Oct 13, 2005 6:23 am | |
| Malcolm Wallace | Oct 13, 2005 6:29 am | |
| John Meacham | Oct 13, 2005 6:37 am | |
| John Meacham | Oct 13, 2005 6:39 am | |
| Simon Peyton-Jones | Oct 13, 2005 7:02 am | |
| Benjamin Franksen | Oct 13, 2005 7:26 am | |
| Benjamin Franksen | Oct 13, 2005 7:33 am | |
| S.M.Kahrs | Oct 13, 2005 7:37 am | |
| John Meacham | Oct 13, 2005 8:32 am | |
| Simon Peyton-Jones | Oct 13, 2005 9:23 am | |
| Udo Stenzel | Oct 13, 2005 9:46 am | |
| Jan-Willem Maessen | Oct 13, 2005 9:58 am | |
| Paul Govereau | Oct 13, 2005 1:21 pm | |
| Jacques Carette | Oct 13, 2005 1:52 pm | |
| John Meacham | Oct 13, 2005 4:45 pm | |
| John Meacham | Oct 13, 2005 6:13 pm | |
| John Meacham | Oct 13, 2005 6:21 pm | |
| David Menendez | Oct 13, 2005 6:49 pm | |
| John Meacham | Oct 13, 2005 8:33 pm | |
| aj...@spamcop.net | Oct 13, 2005 11:25 pm | |
| Ashley Yakeley | Oct 14, 2005 6:20 am | |
| Ashley Yakeley | Oct 14, 2005 6:31 am | |
| Wolfgang Jeltsch | Oct 14, 2005 9:46 am | |
| Wolfgang Jeltsch | Oct 14, 2005 11:44 am | |
| Wolfgang Jeltsch | Oct 14, 2005 11:47 am | |
| Remi Turk | Oct 14, 2005 2:05 pm | |
| Udo Stenzel | Oct 15, 2005 6:15 am | |
| Ross Paterson | Oct 27, 2005 6:58 am | |
| Wolfgang Jeltsch | Oct 28, 2005 7:05 am |
| Subject: | [Haskell] PROPOSAL: class aliases | |
|---|---|---|
| From: | Paul Govereau (gove...@eecs.harvard.edu) | |
| Date: | Oct 13, 2005 1:21:30 pm | |
| List: | org.haskell.haskell | |
On Oct 12, John Meacham wrote:
[...]
class Num a where (+), (*) :: a -> a -> a (-) :: a -> a -> a negate :: a -> a fromInteger :: Integer -> a
ideally we would want to split it up like so (but with more mathematically precise names):
class Additive a where (+) :: a -> a -> a zero :: a
class Additive a => AdditiveNegation where (-) :: a -> a -> a negate :: a -> a x - y = x + negate y
class Multiplicative a where (*) :: a -> a -> a one :: a
class FromInteger a where fromInteger :: Integer -> a
[...]
class alias (Addititive a, AdditiveNegation a, Multiplicative a, FromInteger a) => Num a where one = fromInteger 1 zero = fromInteger 0 negate x = zero - x
This class alias isn't 100% backwards compatible, because the original Num class doesn't have a zero method. For instance, if I had written this function in my program:
zero :: Num a => a zero = fromInteger 0
Then, after swapping in the new alias, Num, the compiler would probably complain that I have multiple definitions for zero.
Perhaps there could be a mechanism for hiding class methods as well? e.g.
class alias (Addititive a without zero, -- remove zero AdditiveNegation a, Multiplicative a, FromInteger a) => Num a where ...
I am not sure this could still be done with a source-to-source translation, but perhaps it is worth considering. Of course, if we allow union and subtraction, then why not addition, intersection, complement (ok, maybe not complement).
Paul





