| 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: | John Meacham (jo...@repetae.net) | |
| Date: | Oct 13, 2005 4:45:36 pm | |
| List: | org.haskell.haskell | |
On Thu, Oct 13, 2005 at 01:41:14PM -0400, Paul Govereau wrote:
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.
You would use the module system to hide these extra methods.. like your prelude lookalike will have
module Prelude(Num(negate,(-),(+),(*),fromInteger), ...) where
and NewPrelude would export everything.
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).
no need, the module system lets us hide what we need to to keep compatability and is not tied to the alias itself, which is good because some people might want to use one and zero with Num and import the appropriate module to let them do that. John
-- John Meacham - ?repetae.net?john?





