[Python-3000] PEP 31XX: A Type Hierarchy for Numbers (and other algebraic entities)
jason.orendorff at gmail.com
Wed Apr 25 19:27:31 CEST 2007
On 4/25/07, Collin Winter <collinw at gmail.com> wrote:
> I can see use-cases for this level of formalism, but I'm a strong -1
> on making any part of the stdlib effectively off-limits for people
> without advanced math degrees. Why can't this be shipped as a
> third-party module?
I agree. That last question says something interesting
about ABCs, though. You and I don't care about Rings, but
some people do, and they would probably like this as a
third-party library... if it were possible.
In Haskell, you can define a typeclass (which is a lot like an ABC):
class Ring r where
zero :: r
add :: r -> r -> r
negate :: r -> r
mul :: r -> r -> r
Then you can declare that certain existing types, even builtin
types, conform to it:
-- tell Haskell that "the Integer type is a Ring"
instance Ring Integer where
zero = 0
add x y = x + y
negate x = -x
mul x y = x * y
This feature makes stuff like NumericPrelude possible.
My understanding is that Guido's ABCs won't support this,
so in fact you *couldn't* ship Jeffrey's numeric classes
as a third-party library.
(My perspective is a little different from Jeffrey's. Maybe Haskell
does draw fire for not having a ton of numeric typeclasses; I don't
know. But it seems to me Haskell gets it Just Right: the standard
typeclasses are simple, practical, and loose enough to accomodate Int
and Float; and the language lets you roll your own crazy mathematical
mojo if that's what you like.)
More information about the Python-3000