[Haskell-cafe] Re: Numeric type classes
Henning Thielemann
lemming at henning-thielemann.de
Fri Sep 15 08:17:47 EDT 2006
On Thu, 14 Sep 2006, David Menendez wrote:
> Ross Paterson writes:
>
> > On Thu, Sep 14, 2006 at 01:11:56AM -0400, David Menendez wrote:
> > > Coincidentally, I spent some time last week thinking about a
> > > replacement for the Num class. I think I managed to come up with
> > > something that's more flexible than Num, but still mostly
> > > comprehensible.
> >
> > The fact that the first part of your structure is much the same as
> > the one on the web page (which is essentially that part of the revised
> > numeric prelude plus a Haskell 98-compatible veneer) is evidence that
> > it's pretty clear what to do with Num and Fractional.
>
> That being said, I don't expect anything to change.
>
> I've looked through the revised numeric prelude, but the qualified class
> names put me off.
Just consequent usage of:
http://www.haskell.org/hawiki/UsingQualifiedNames
> Everything shows up in Haddock as "C".
That's a problem. I recently tried to extend Haddock to showing
qualifications. But this turned out to be more complicated than I
expected.
> Also, it doesn't support naturals--which, admittedly, is not a big loss.
Simple to add. It will certainly be added.
> > The only point of contention is whether to factor out monoid and
> > semiring classes. Arguments against include:
> >
> > * There are lots of monoids, and (+) doesn't seem a reasonable symbol
> > for some of them.
>
> True enough. (At least it's more general than "mappend".)
>
> I would expect all the more specific monoid operators, like (||) and
> (++), to stick around for readability when not writing
> non-monoid-generic code. Not to mention that (+) and (++) associate
> differently.
I think we should separate the names of the functions which implement some
operation from the method names. That is, (||) should be the name for the
implementation of Bool-OR, and could also be 'or' (if this wouldn't be
given to the list function) and (+) is the name of the corresponding
Monoid method. If I want to write a generic monoid algorithm I have to use
(+), otherwise I use (||) for type safety. It's just the same like 'map'
and 'fmap'. However writing accidentally (a+b) if a and b are Bool will no
longer be reported as type error.
More information about the Haskell-Cafe
mailing list